0

次のように、std::vector に連続しない方法で値を挿入することは可能ですか?

std::vector<int> Myvector;
//Myvector[0] = 123;
//Myvecotr[2] = 456;
//Myvector[5] = 789;
4

3 に答える 3

6

並べ替え。この方法で実際に挿入することはできませんが、サイズを設定して、関心のあるものだけに値を設定することはできます。

本当にまばらにしたい場合(たとえば、例では Myvector[1]、[3]、[4] はまったく存在しません)、いいえ。std::map<int, int>そのようなものには、ベクトルの代わりに を使用できます。

于 2012-07-16T06:03:22.627 に答える
1

コードが、まだ存在しない要素のインデックスを使用している場合。つまり、インデックスが (>=) を超える場合、vector::size()存在しない要素にアクセスしています。残念ながら、未定義の動作に陥ります。

std::vector<int> Myvector;
Myvector[0] = 123; // boom  Myvector[0] was never created

したがって、これらの要素を追加する必要があります

// the boring way
Myvector.push_back(0);
Myvector.push_back(0);
Myvector.push_back(0);
Myvector.push_back(0);
Myvector[0] = 123; // set element 0 to 123
Myvector[2] = 456; // set element 2 to 456

または、他の回答で述べたように、サイズを設定します(私が好む):

Myvector.resize(5); 

または、最初からのサイズを述べます。

std::vector<int> Myvector(5); // 5 elements, all with the value of the default c'tor
于 2012-07-16T06:56:59.243 に答える
0

最初にサイズを設定できれば、このようなことができます

vector<int> iVec(5);
iVec[0] = 0;
iVec[2] = 2;
iVec[4] = 4;
于 2012-07-16T06:07:09.837 に答える