假设我们被赋予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并将迭代器返回到该范围的末尾.我想在那里剪辑矢量.
你可以这样做:
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)
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |