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

标签 c++ c++11 stl containers

我正在尝试使用容器来存储字符串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/

相关文章:

c++ - 在 C++ 中避免 lambda 拷贝

c++ - 单个语句中的多个复合赋值 : is it Undefined Behavior or not?

c++ - 一种用于对等值条目进行排序和改组的快速算法(最好使用 STL)

c++ - 如果我只有依赖程序的 .o 文件,我可以在可执行文件中反射(reflect)头文件的变化吗

C++ libtins 构建错误

c++ - "UTF-16"和 "std::wstring"有什么区别?

c++ - std::map clear() 在调试器中的性能?

C++ 优先级和关联性

c++ - 按位 & 运算符返回 255

c++ - 如何使用 CMake 构建新的 C++ 项目?