gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:27 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com