gpt4 book ai didi

c++ - 我可以在迭代时删除 std::string 对象中的元素吗

转载 作者:太空狗 更新时间:2023-10-29 19:58:32 25 4
gpt4 key购买 nike

我可以在迭代时删除 std::string 对象中的元素吗?

for (auto itr = str.rbegin(), rend = str.rend(); itr != str.rend() && *itr == '0'; ++itr)
{
str.pop_back();
}

最佳答案

不,这是不允许的。修改字符串的内容会使任何迭代器失效,尤其是 itr

要从字符串中删除尾随字符,请考虑使用 find_last_not_of :

auto ix = str.find_last_not_of('0');
str.resize(ix + 1);

另一种选择是使用 erase函数,它将返回序列中的下一个迭代器,从而避免出现任何无效的迭代器。

for (auto itr = str.rbegin(); itr != str.rend() && *itr == '0'; /*nothing*/)
itr = str.erase(itr);

这将删除最后一个字符(如 pop_back 那样)并安全地推进迭代器,因此您实际上再也不会有无效的迭代器了。需要注意的是,您不能使用之前计算的 rend 迭代器,因为它是无效的;但是,您实际上并没有使用它。

关于c++ - 我可以在迭代时删除 std::string 对象中的元素吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685327/

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