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());
似乎有更好的方法。
答案 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。