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))代码>