2015-01-26 66 views
1

STL容器的插入方法有两个参数:一个指示插入位置的迭代器和一个要插入的值。 了解insert方法定义了新插入的值将插入到迭代器当前引用的值之前。C++向量和插入

为什么不适合改为定义insert将新值放在当前值之后?

+1

根据我的猜测,可能会涉及'size_t'和索引0。在0处插入需要'size_t'取值为-1(而不是无符号),假设向量迭代器本质上是包装索引(这对于底层数组是有意义的)。如果你认为'std :: vector :: insert'是“insert at ...”,那么这个功能就有意义了。 – Conduit 2015-01-26 18:52:40

+4

如果这是你的方式,你永远不能插入位置0,因为在列表开始之前没有任何值。 – 2015-01-26 18:52:48

回答

0

新插入的方法将处于迭代器指向的位置,其他所有内容都将被“推到下一个位置”。

如果你把它过去的当前项目,那么你实际插入的迭代器+ 1

+0

这样想吧。如果我告诉你在矢量中做出第五项,你会不会把它放在第六个对的位置? – 2015-01-26 18:54:24

0

的迭代器指向前插入新项目的项目。从语义上讲,您正在提供新项目的位置。

如果相反的项目插入后,你怎么能插入在载体的开始作为第一项?

使用当前的方案,项目可以插入任何地方。但根据你提出的替代方案,如果没有特殊情况,你不能插入。

0
  1. ,因为你不能将能够在一开始就受到写入执行插入:

    vect.insert(vect.begin(), value); 
    
  2. ,因为你不能将能够通过在年底前轻松执行插入写

    vect.insert(vect.end(), value); 
    

执行上述操作的新值后实际上是在开始/结束(如评估d之后,插入之前的迭代器可能会失效),就像代码所说的那样。如果您以任何其他方式定义insert,则必须与+1/-1混淆。