C ++ - 插入到Vector中 - 在迭代器之后或之前?

时间:2014-04-13 01:33:00

标签: c++ vector stl iterator

上下文是:未知大小的数据集,它会不断迭代,但初始化后的插入次数最少(初始化速度不是问题)。

插入到vector之后,混淆是元素位置:

如果我们在向量为空时插入vector.begin(),它会在地址.begin()处创建一个元素。

如果我们在向量为非空时插入vector.begin(),它是将.begin()中的现有元素向前移动一个,还是将新元素放在.begin()之后?

类似地,如果在插入新元素之前迭代向量并匹配向量元素中的特定条件,如果我们插入如下: vector.insert(iterator,new_element)

是否在当前迭代元素之后或之前插入元素? 提前致谢。 中号

1 个答案:

答案 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)将有效。