Jak*_*son 235 c++ stl vector erase erase-remove-idiom
vector<int> myVector;
Run Code Online (Sandbox Code Playgroud)
并且让我们说向量中的值是这个(按此顺序):
5 9 2 8 0 7
Run Code Online (Sandbox Code Playgroud)
如果我想删除包含值"8"的元素,我想我会这样做:
myVector.erase(myVector.begin()+4);
Run Code Online (Sandbox Code Playgroud)
因为那会抹掉第4个元素.但有没有办法根据值"8"擦除元素?喜欢:
myVector.eraseElementWhoseValueIs(8);
Run Code Online (Sandbox Code Playgroud)
或者我只是需要遍历所有的向量元素并测试它们的值?
Geo*_*che 390
std::remove()相反怎么样:
#include <algorithm>
...
vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());
Run Code Online (Sandbox Code Playgroud)
这种组合也称为擦除 - 删除习语.
zne*_*eak 92
您可以使用std::find获取值的迭代器:
#include <algorithm>
std::vector<int>::iterator position = std::find(myVector.begin(), myVector.end(), 8);
if (position != myVector.end()) // == myVector.end() means the element was not found
myVector.erase(position);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
291752 次 |
| 最近记录: |