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

C++ 在C+中给定迭代器调整向量大小+;,c++,c++11,C++,C++11,假设我们被赋予std::vector V和一个迭代器p到向量中的某个位置 Q1:返回给定迭代器p为std::end(w)的新向量w的好方法是什么 我可以创建一个新的向量w,将元素从std::begin(v)移动到p,并分配p=std::end(w) Q2:除了保持pconst,还有什么方法可以实现我想要的吗 我的问题的起源如下:我有一个向量,我为它应用了std::remove(std::begin(v),std::end(v),elem)。这将放置所有不等于elem的元素,并将迭代器返回到该范围

假设我们被赋予
std::vector V
和一个迭代器
p
到向量中的某个位置

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

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

Q2:除了保持
p
const
,还有什么方法可以实现我想要的吗

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

您可以执行以下操作:

std::vector<T> w = v;
v.erase(p, v.end());
w.swap(v);
您可以这样做:

std::vector<T> w = v;
v.erase(p, v.end());
w.swap(v);

不能返回新向量,因为迭代器仅对给定向量有效。但是,如果您愿意修改现有的向量,您可以简单地调用
V.erase(p,V.end())
。您认为为什么要这样做?@LightnessRacesinOrbit将用“擦除/删除”习惯用法的错误原因展开问题?另外,
remove
不会将元素移动到末端。结束元素具有未指定的值。无法返回新向量,因为迭代器仅对给定向量有效。但是,如果您愿意修改现有的向量,您可以简单地调用
V.erase(p,V.end())
。您认为为什么要这样做?@LightnessRacesinOrbit将用“擦除/删除”习惯用法的错误原因展开问题?另外,
remove
不会将元素移动到末端。结束元素具有未指定的值。要就地执行此操作:
v.resize(std::distance(v.begin(),p))执行此操作:
v.resize(std::distance(v.begin(),p))