C++ 为什么vector::insert的重载返回void?

C++ 为什么vector::insert的重载返回void?,c++,vector,C++,Vector,似乎有更好的办法。呃。。。但您是唯一知道要将数据插入何处的人。vector如何知道您计划在哪里进行第二次插入 如果您计划在同一位置进行两次连续插入(只是猜测),那么您可以将迭代器转换为“与重新分配无关”的形式(索引),然后在第一次插入后将其转换回迭代器。您需要获得一个新的迭代器并从那里开始。有一个insert版本不会返回void。检查。在C++0x中,insert的范围插入重载返回迭代器,就像单元素插入重载一样 int offset = position - vector.begin(); ve

似乎有更好的办法。

呃。。。但您是唯一知道要将数据插入何处的人。vector如何知道您计划在哪里进行第二次插入


如果您计划在同一位置进行两次连续插入(只是猜测),那么您可以将迭代器转换为“与重新分配无关”的形式(索引),然后在第一次插入后将其转换回迭代器。

您需要获得一个新的迭代器并从那里开始。

有一个insert版本不会返回void。检查。

在C++0x中,
insert
的范围插入重载返回迭代器,就像单元素插入重载一样

int offset = position - vector.begin();
vector.insert(position, data.begin(), data.end());
vector.insert(vector.begin() + offset, moredata.begin(), moredata.end());
模板
迭代器插入(常量迭代器位置,
输入者优先,输入者最后);

std::vector
的迭代器是随机访问的。仅使用直接偏移会损失什么?当然不是效率……好吧,你可以走另一条路,通过“链接”迭代器一次完成。不幸的是,NeITEC++和BOOST都提供了这样的功能,所以你必须自己去做。也许我会在不那么忙的时候写一篇。不好意思,因为我认为这是“正确”的方法。是的,我正在尝试在相同的位置插入,我已经编辑了我的问题。谢谢,但请您进一步解释“您可以将迭代器转换为“重新分配独立”形式(索引),然后在第一次插入后将其转换回迭代器。”我不太明白你的意思,也不太明白怎么做。@Marlon:Random-access迭代器,比如
std::vector
,可以减去,得到迭代器之间的距离。因此,从迭代器中减去
std::vector::begin()
将生成一个索引。插入后,可以使用
begin()+idx
在相同位置生成新的迭代器。这是STL 101的东西;-]这就是我来这里之前的原始代码。vector::insert没有将迭代器返回到相同的位置,这似乎很奇怪。@ildjarn:这是在您发表评论前17分钟的问题中提到的。:)(刷新!:p)没关系,不用担心。向量容器中的重新分配会使他在问题中指出的所有先前获得的迭代器、引用和指针无效。抱歉,请重新阅读问题。我喜欢你添加到问题中的算术。@Brian:这就是为什么你会使用新的迭代器,从
insert
返回,而不是任何现有的迭代器,现在无效。他显然在插入一个范围。您链接的参考站点显示范围插入的
void
返回类型。但是我的C++0x草稿显示了所有重载的返回类型
迭代器
。@Ben:谢谢您的后续介绍。问题中的范围示例似乎是在以后的编辑过程中添加的。信息越多越好;)
int offset = position - vector.begin();
vector.insert(position, data.begin(), data.end());
vector.insert(vector.begin() + offset, moredata.begin(), moredata.end());
template  <class  InputIterator>
    iterator  insert(const_iterator  position, 
                     InputIterator  first,  InputIterator  last);