vector<int> v;
v.push_back(0); //you have to do this
//v[0] = 0; //this gives you an error
v[0] = 1000000; //but now you can set it
では、最初にベクトルを初期化するときに push_back を実行する必要があり、その後は設定するだけでよいのはなぜでしょうか? int などのプリミティブ型の場合、int i = 0; を実行できます。初期化用。
vector<int> v;
v.push_back(0); //you have to do this
//v[0] = 0; //this gives you an error
v[0] = 1000000; //but now you can set it
では、最初にベクトルを初期化するときに push_back を実行する必要があり、その後は設定するだけでよいのはなぜでしょうか? int などのプリミティブ型の場合、int i = 0; を実行できます。初期化用。
ベクトルのサイズが事前にわかっている場合は、push_back()の単純なシーケンスを使用しないでください。ベクトルが大きい場合(たとえば、512要素を超える場合)に再割り当てするのは時間の無駄になる可能性があります。
より良いこと:
vector<int> v;
v.reserve(N); // N is the expected size, but right now [0] is undefined.
for (...) {
v.push_back(...); // No problems in adding more than N elements, but may have to reallocate.
}
vector<int> v;
v.resize(N);
for (size_t i=0;i<N;i++)
v[i] = ...; // You can't write past N-1 here!
vector<int> v(N);
for (size_t i=0;i<N;i++)
v[i] = ...; // You can't write past N-1 here!
vector<int> v(N,val); // v[0:N-1] are all equal to val
最初にベクターを作成したときは空で、vector[0]
存在しないためです。push_back
ベクトルに要素を追加すると、それを変更または読み取ることができますvector[i]
すべてを100%明確にするために、ベクトルの宣言、
vector<int> v;
ある意味で、変数の宣言に似ています。
int x;
そして、あなたが望むなら、例えば、
cout << x;
ゴミが出ます。しかし、あなたが宣言した場合
int x(2);
何もかも良くなるだろう。同様にベクトルの場合:の宣言
vector<int> v;
ベクトルにいくらかのメモリスペースを割り当てますが、それを埋めません。次に、指定できます
vector<int> v(2);
これは、2つの要素のベクトルを宣言したか、ベクトルのみの機能であるpush_backを使用したことを意味します。お気づきのように、これによりベクトルに要素が追加されます。
std::vector<int>
ではないからstd::map<int, int>
です。
std::vector
コレクションに含めるには、要素を手動でpush_back()
、または (C++11 の場合)する必要があります。emplace_back()
もちろん、一部のコンストラクターでは、初期要素を含めることができます。そしてもちろん、その代入演算子です。
subscript( ) 演算子は、既存の要素の[]
読み取りおよび/または変更にのみ使用する必要があります。範囲外 (存在しない) 要素を使用してインデックスを作成すると、未定義の動作が発生します。operator[]
最初に、次のような要素の値を設定するためのメモリを割り当てる必要があります。
v.resize(new_size);
またはpush_back
メソッドを使用して要素を追加します。
v[0]
まだ存在しないため、アクセスできませv[0]
ん。ベクトルは、空のベクトルとしてデフォルトで構築されます。要素を背面にプッシュすると、サイズが 1 ずつ大きくなります。これで、追加したばかりの要素にアクセスできるようになります。1 つの要素で開始する場合は、適切なコンストラクターを使用します。
std::vector<int> v(1); //one zeroed integer
あなたはリンゴとオレンジを比較しています。int i = 0;
のようになりますstd::vector<int> v;
。