上下文是:未知大小的数据集,它会不断迭代,但初始化后的插入次数最少(初始化速度不是问题)。
插入到vector之后,混淆是元素位置:
如果我们在向量为空时插入vector.begin(),它会在地址.begin()处创建一个元素。
如果我们在向量为非空时插入vector.begin(),它是将.begin()中的现有元素向前移动一个,还是将新元素放在.begin()之后?
类似地,如果在插入新元素之前迭代向量并匹配向量元素中的特定条件,如果我们插入如下: vector.insert(iterator,new_element)
是否在当前迭代元素之后或之前插入元素? 提前致谢。 中号
答案 0 :(得分:6)
在std::vector::insert()
上引用cppreference:
在[iterator]指向的位置之前插入值。
我们需要在每个可能的位置插入一个语法(开始,结束,介于这两个之间):
std::vector<int> v; // { }
v.insert(std::begin(v), 2); // { 2 }
v.insert(std::find(std::begin(v), std::end(v), 2), 1); // { 1, 2 }
v.insert(std::end(v), 3); // { 1, 2, 3 }
容器的end
指针是在最后一个元素之后的一个点,我们无法插入该点,所以我们之前插入。
当容器为空时,std::begin(container) == std::end(container)
为true
,因此insert(std::begin(container), value)
将有效。