gpt4 book ai didi

c++ - 使用迭代器 c++ 删除对象类型的 vector 元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:31 26 4
gpt4 key购买 nike

我正在尝试编写一个函数,根据该 vector 元素的 account_name 从 listAccounts 中删除一个 vector 元素。我写了这个:

void Account::remove_account(string name) {

auto iter = listAccounts.begin();

for ( ; iter != listAccounts.end(); iter++) {
if ((*iter).account_name == name) {
listAccounts.erase(iter);
}
}

}

但是我从 vector 删除中遇到了段错误,据我所知,这意味着我试图访问我无权访问的内存,但我不确定如何正确编写它。

最佳答案

一旦删除迭代器指向的元素,该迭代器就会失效。 (对于 std::vector,删除元素之后的所有其他迭代器也变得无效)。并且递增取消引用无效的迭代器具有未定义的行为。

你可以这样做(假设只删除一个元素):

void Account::remove_account(string name) {
auto iter = std::find_if(listAccounts.begin(), listAccounts.end(),
[&](const auto& s){ return s.account_name == name; });
if(iter != listAccounts.end())
listAccounts.erase(iter);
}

对于多个元素,这将是:

void Account::remove_account(string name) {
for(auto iter = listAccounts.begin(); iter != listAccounts.end(); ){
iter = std::find_if(iter, listAccounts.end(),
[&](const auto& s){ return s.account_name == name; });
if(iter != listAccounts.end())
iter = listAccounts.erase(iter);
}
}

关于c++ - 使用迭代器 c++ 删除对象类型的 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46759363/

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