我正在编写一小段代码,我必须根据向量元素中的值在某个位置将值插入到 C++ STL 向量中。我正在使用 insert()
函数来完成此操作。我意识到当我想在向量末尾添加一个新元素时,我可以简单地使用 push_back()
。但是为了让我的代码看起来不错,我想专门使用 insert()
,它将指向所需插入点之后的元素的迭代器和要插入的值作为输入。如果作为参数传入的迭代器的值为 v.end()
,其中 v
是我的向量,这是否与 push_back()
一样工作?
非常感谢!
std::list
避免了这一点,但 std::list
否则会非常昂贵。)
对于支持它的序列容器,a.push_back(x)
被定义为具有与 (void)a.insert(a.end(),x)
相同的语义。
参见 ISO/IEC 14882:2003 23.1.1/12 [lib.sequence.reqmts] 中的表 68。
https://i.stack.imgur.com/fHYx0.png
关于 vector.push_back(x)
与 vector.insert(vector.end(), x)
的运行时间,请考虑强调的部分:
表 68 列出了为某些类型的顺序容器提供的顺序操作,但不为其他类型提供。实现应为“容器”列中显示的所有容器类型提供这些操作,并应实现它们以占用摊销常数时间。
push_back
返回 void
与 insert
将 iterator
返回到刚刚插入的元素之间存在细微差别。
顺便说一句,还有另一种方法可以验证它们是否做同样的事情:编译以下代码
int main()
{
std::vector<int const> v;
v.push_back(0);
return 0;
}
编译器会打印出很多烦人的信息,只要阅读一下,最后你会发现 push_back
调用了 insert
(如果没有,请尝试编译 v.insert(v.end(), 0)
以查看它们是否调用了相同的插入函数)。
不定期副业成功案例分享