解除引用char迭代器

时间:2014-07-11 17:02:55

标签: c++ 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是一个字符串,我可以使用迭代器访问其中的字符,但事实证明我必须将其设置为变量以使其工作。我不明白编译错误。有什么区别?

2 个答案:

答案 0 :(得分:4)

问题实际上就在上面。

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

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

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

答案 1 :(得分:1)

您将解除引用*与指针成员->混合使用,只使用一个:

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

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