矢量中的非连续插入

non-consecutive insertion in vectors

本文关键字:连续 插入      更新时间:2023-10-16

是否可以像一样以非连续的方式在std::向量中插入值

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

有点像。你不能真的用这种方式插入,但你可以设置大小,只为你关心的人设置值。

如果你真的希望它是稀疏的(例如,在你的例子中,Myvector[1]、[3]、[4]根本不存在),那么就不存在。对于这样的东西,你可以使用std::map<int, int>而不是向量。

当您的代码为一个尚不存在的元素使用索引时。换句话说,如果您的索引超过(>=)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

如果您可以在开始时设置大小,那么您可以执行类似的操作

vector<int> iVec(5);
iVec[0] = 0;
iVec[2] = 2;
iVec[4] = 4;