繁体   English   中英

取消引用字符迭代器

[英]Dereferencing char iterator

我是 C++ 新手,刚刚了解了迭代器。 我有这个代码:

//lines is a vector<string>
for (auto it = lines.begin(); it != lines.end(); ++it) {
    //I want to access each characters in each element (string) of the vector
    for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) {
        cout << *it2 << endl; //error: invalid type argument of unary '*' (have 'char')
    }
    cout << *it << endl; //ok
}

我测试了将字符串分配给变量:

string word = *it;
for (auto it2 = word.begin(); it2 != word.end(); ++it2) {
    cout << *it2 << endl; //ok
}

我的问题是为什么第二个代码有效而第一个无效? 在我看来 *it2 是一个字符串,我可以使用迭代器访问其中的字符,但事实证明我必须将它分配给一个变量才能工作。 我不明白编译器错误。 有什么不同?

问题其实就在上面那一行。

for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) {

auto的类型实际上转换为char因为您过早地取消引用您的迭代器。 *it->begin() string.begin() *it->begin()实际上接受string.begin()并取消引用它,返回一个char 要修复,只需从for语句中删除迭代器取消引用,如下所示:

for (auto it2 = it->begin(); it2 != it->end(); ++it2) {

您将取消引用*与指针成员->混合在一起,只使用一个:

for (auto it2 = it->begin(); it2 != it->end(); ++it2) {

或者

for (auto it2 = (*it).begin(); it2 != (*it).end(); ++it2) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM