为了从 std::vector
中移除一个迭代器,我可以做这两件事:
std::vector<int>& vec = myNumbers; // use shorter name
vec.erase(std::remove(vec.begin(), vec.end(), number_in), vec.end());
或者我可以这样做:
auto it = find(vec.begin(), vec.end(), number_in);
vec.erase(it);
我猜第二种更直观,但哪个更快?
编辑: vector 中的元素是唯一的,我们不必担心一次删除多个元素。
最佳答案
第一个保证正确工作,而你的第二个版本可能更快(由于 std::find
在匹配的第一个项目处停止),但它肯定不安全。
auto it = find(vec.begin(), vec.end(), number_in);
if (it != vec.end())
vec.erase(it);
这将确保您不会删除无效的迭代器。
所以这取决于你的需求。如果您想要一个正确的程序,第一个程序无需进一步干预即可运行,但第二个程序需要您的客户提供错误票,然后您必须修复它(如上所述)。
关于c++ - 通过迭代器从 std::vector 中移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28342129/