C++ Erase vector element by value rather than by position?
本问题已经有最佳答案,请猛点这里访问。
字母名称(P)And lets say the values in the vector are this(in this order):(p)字母名称(P)如果我想得到的是包含"8"价值的要素,我想我会这样做:(p)字母名称(P)因为这将是第四次选举。但是,是否有任何途径可以通过排除"8"的价值来实现这一点?Like:(p)字母名称(P)还是我只是需要反复使用所有向量要素和测试它们的价值?(p)
用
1 2 3 | #include ... vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end()); |
这种组合也称为"删除"习语。
您可以使用
1 2 3 4 | #include 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); |
你不能直接这么做。您需要使用
EricNiebler正在研究一个范围建议,其中一些示例演示了如何删除某些元素。去除8。创建一个新的向量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> #include <range/v3/all.hpp> int main(int argc, char const *argv[]) { std::vector<int> vi{2,4,6,8,10}; for (auto& i : vi) { std::cout << i << std::endl; } std::cout <<"-----" << std::endl; std::vector<int> vim = vi | ranges::view::remove_if([](int i){return i == 8;}); for (auto& i : vim) { std::cout << i << std::endl; } return 0; } |
输出
2
4
6
8
10
-----
2
4
6
10