gpt4 book ai didi

c++ - 尽管在 C++ 中检查,迭代器仍越界

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:43 24 4
gpt4 key购买 nike

我有一个函数可以反转字符串中的单词,例如"hi there Sam"它将字符串反转为 "Sam there hi"。
它通过反转字符串然后反转单词来做到这一点。
但是在它完成之后,我在 for 的线路上遇到了段错误。
我怀疑迭代器试图在有效范围之外取消引用。
但它首先检查范围,所以如果无效,它会立即退出。
我哪里错了?

void rev(string& str) {
std::reverse(str.begin(), str.end());
auto bIter = str.begin();
auto eIter = str.begin();

while (eIter != str.end()) {
for (;eIter != str.end() && (*eIter) != ' '; eIter++) {}
std::reverse(bIter, eIter);
bIter = ++eIter;
}
}

最佳答案

eIter == str.end() 在内层 for 循环结束时,由于 while 循环的最后一行,它超出了 str.end() (++eIter).

添加 break 解决了这个问题。

void rev(string& str) {
std::reverse(str.begin(), str.end());
auto bIter = str.begin();
auto eIter = str.begin();

while (eIter != str.end()) {
for (;eIter != str.end() && (*eIter) != ' '; eIter++) {}
std::reverse(bIter, eIter);
if (eIter == str.end()) break; // HERE
bIter = ++eIter;
}
}

关于c++ - 尽管在 C++ 中检查,迭代器仍越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091930/

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