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

时间:2011-03-30 01:30:46

标签: c++ vector

template <class InputIterator>
    void insert ( iterator position, InputIterator first, InputIterator last );

我需要在向量中插入两次,但数据很大,我的向量需要重新分配。如果对insert的调用使迭代器无效,我怎么知道第二次插入的位置(在同一位置)?

我应该做这样的事情:

int offset = position - vector.begin();
vector.insert(position, data.begin(), data.end());
vector.insert(vector.begin() + offset, moredata.begin(), moredata.end());

似乎有更好的方法。

4 个答案:

答案 0 :(得分:3)

呃......但是唯一知道想要插入数据的人。矢量如何知道计划进行第二次插入?

如果你计划在同一个位置进行两次连续插入(只是猜测),那么你可以将迭代器转换为“reallocation-independent”形式(索引),然后在第一次插入后将其转换回迭代器。 / p>

答案 1 :(得分:3)

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

template  <class  InputIterator>
    iterator  insert(const_iterator  position, 
                     InputIterator  first,  InputIterator  last);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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