使用C++ vector :: insert()添加到向量的末尾

Nic*_*tyn 54 c++ iterator stl vector

我正在写一小段代码,我必须根据向量元素中的值将值插入某个地方的C++ STL向量中.我正在使用该insert()功能来完成此任务.我意识到,当我想在向量的末尾添加一个新元素时,我可以简单地使用push_back().但为了保持我的代码看起来不错,我想专门使用insert(),它将指向所需插入点之后的元素的迭代器和要插入的值作为输入.如果作为参数传入的迭代器的值是v.end(),v我的向量在哪里,它的工作方式是否相同push_back()

非常感谢!

CB *_*ley 92

a.push_back(x)定义为具有与(void)a.insert(a.end(),x)支持它的序列容器相同的语义.

参见ISO/IEC 14882:2003 23.1.1/12 [lib.sequence.reqmts]中的表68.

  • 快速提问,在性能方面,我想知道 pusk_back 是否工作得更快?我测试了一些显示插入有点慢的东西。我只是想确保...谢谢 (2认同)
  • push_back()不返回新插入元素的迭代器.std :: list <T> :: end()将返回一个死迭代器. (2认同)

neu*_*ont 16

有一个细微的差别push_back返回void是否insert返回iterator到元素刚插入.

顺便说一下,还有另一种方法来验证它们是否做同样的事情:编译以下代码

int main()
{
    std::vector<int const> v;
    v.push_back(0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器会打印很多恼人的消息,只需读取,你会发现push_back调用insert(如果没有,请尝试编译v.insert(v.end(), 0),看看他们是否调用相同的插入函数).