gpt4 book ai didi

c++ - 如何正确使用这个迭代器?

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:44 25 4
gpt4 key购买 nike

我正在尝试使用容器来存储字符串 s 的迭代器,但在运行时出现了段错误。正如您将在下文中看到的,错误似乎来自 char temp = **itbegin;,这可能意味着我无法通过先前的迭代器分配任何值。

这是为什么呢?我是不是用错了迭代器?如何正确使用迭代器?

#include <iostream>
#include <vector>
using namespace std;
string reverseVowels(string s);

int main()
{
string s ="hello";
cout << reverseVowels(s);
}
string reverseVowels(string s) {
string::iterator iter = s.begin();
string::iterator iterend = s.end();
vector<string::iterator> iteratorbox;
for(;iter != iterend ; ++iter){
if((*iter) == 'a' &&
(*iter) == 'e' &&
(*iter) == 'i' &&
(*iter) == 'o' &&
(*iter) == 'u'){
iteratorbox.push_back(iter);
}

}
auto itbegin = iteratorbox.begin();
auto itend = iteratorbox.end() ;
--itend;
//for(;itbegin < itend ; ++itbegin, --itend)
{
char temp = **itbegin;
// *(*itbegin) = *(*itend);
// *(*itend) = temp;
}
return s;
}

最佳答案

您的问题来自您在 iteratorbox vector 中插入迭代器的条件。

您使用了 && 运算符,这意味着字符串的每个字母都必须同时等于所有元音。这意味着不会插入任何迭代器,然后您将尝试取消引用 vector 的 begin() 迭代器,它恰好是它的尾后迭代器。这会导致未定义的行为,在您的情况下表现为崩溃。

你可能打算使用

((*iter) == 'a' ||
(*iter) == 'e' ||
(*iter) == 'i' ||
(*iter) == 'o' ||
(*iter) == 'u')

作为条件。

关于c++ - 如何正确使用这个迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36808503/

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