要从std::vector我中删除迭代器,我可以做以下两件事:
std::vector<int>& vec = myNumbers; // use shorter name
vec.erase(std::remove(vec.begin(), vec.end(), number_in), vec.end());
Run Code Online (Sandbox Code Playgroud)
或者我可以这样做:
auto it = find(vec.begin(), vec.end(), number_in);
vec.erase(it);
Run Code Online (Sandbox Code Playgroud)
我猜第二个更直观,但哪个更快?
编辑: vector 中的元素是唯一的,我们不必担心一次删除多个元素。
第一个版本保证可以正常工作,而第二个版本可能会更快(由于std::find停在第一个匹配的项目上),但它肯定并不安全。
auto it = find(vec.begin(), vec.end(), number_in);
if (it != vec.end())
vec.erase(it);
Run Code Online (Sandbox Code Playgroud)
这将确保您不会删除无效的迭代器。
所以这取决于你的需求。如果您想要一个正确的程序,第一个程序无需进一步干预即可运行,但第二个程序需要客户提供错误票,然后您必须修复它(如上所述)。
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |