c++ - 通过迭代器从 std::vector 中移除

标签 c++ vector std

为了从 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/

相关文章:

C++ std::vector 创建对象然后添加它与在 vector 中创建它之间的区别?

c++ - 多重继承和unique_ptr销毁

接受任意数量的回调并存储结果的c++类方法

c++ - 访问 std::vector 容器内的数据

c++ - 演绎指南可以有一个明确的( bool )说明符吗?

c++ - 调整数组大小函数不会改变内存位置

c++ - 需要将字符串存储为某些快速数据结构中的对象的 id

c++ - 通过赋值运算符插入索引处的 std::vector

excel - 在 Excel 中创建未知大小的向量

C++:std::map 排序