17

通常、どちらを使用するのが良いかはわかりません。どちらも一般的に同じことをしているように見えますが、ベクトルができることの点でより柔軟ですか? 配列がより適切なのはいつですか?

4

2 に答える 2

16

std::vector<T>ベクトルがスコープ外になると破棄が自動的に行われ、割り当てられたメモリがヒープにきちんと配置され、すべてのメモリが処理されるため、 通常は常に使用することをお勧めします。std::vector<T>配列に取得するすべてのものを提供し、要素がメモリに連続して格納されることを保証します ( を除くstd::vector<bool>)。

次のstd::vector<bool>ようなコードは壊れてしまうため、注意が必要です。

 std::vector<bool> vb;
 vb.push_back(true);
 vb.push_back(false);
 vb.push_back(true);
 bool *pB = &vb[0];
 if( *(pB+1) )
 {
     // do something
 }

実際には、std::vector<bool>連続した s は格納されませんbool。これは、C++11 で修正された標準の例外です。

于 2012-06-02T21:01:31.163 に答える
3

私が実際に配列を使用するのは、組み込みシステムで作業する場合、または特定の API で必要な場合 (つまり、配列を関数の引数として受け取る場合) だけです。また、配列を使用する必要がある場所が 1 つまたは 2 つしかない場合、またはベクトル機能を特に必要としない場合は、vector.h のオーバーヘッドが増えるため、配列を使用する方が理にかなっています。

それ以外の場合は、ベクトルを使用してください:)

于 2012-06-02T21:00:19.020 に答える