在C++中给定迭代器调整向量大小

myf*_*me1 1 c++ c++11

假设我们被赋予std::vector<T> V了一个迭代器p并且向量中的位置.

Q1:返回w给定迭代器p为std :: end(w)的新向量的好方法是什么?

我可以创建一个新的向量w,将元素从std :: begin(v)移动到p并赋值p = std::end(w).

Q2:有没有办法做我想要的但保持p const

我的问题的起源如下:我有一个我应用的向量std::remove(std::begin(v),std::end(v), elem).这应该放置所有不相等的元素,elem并将迭代器返回到该范围的末尾.我想在那里剪辑矢量.

Ker*_* SB 6

你可以这样做:

std::vector<T> w = v;
v.erase(p, v.end());
w.swap(v);
Run Code Online (Sandbox Code Playgroud)

现在p是一个迭代器w,p == w.end()v是原始载体.请注意,交换两个动态容器(使用适当的分配器)会使一个容器的迭代器成为另一个容器的迭代器.

这对于从函数返回值不太有效,因为移动构造没有类似的保证,复制省略也不是强制性的.


但是,鉴于你说这p是结果remove,也许更简单的解决方案将是典型的删除 - 删除习语:

v.erase(std::remove(std::begin(v),std::end(v), elem), std::end(v));
Run Code Online (Sandbox Code Playgroud)