0

好的,所以我首先开始学习 C#,现在我正在学习 C++,所以我对它有点陌生。
在 C# 中,当我想访问列表中的列表时,我会简单地使用嵌套的 for-each 循环。

现在因为在 C++ 中我不知道如何使用 for-each 循环,所以我尝试使用 for 循环访问嵌套列表。

这是我的代码:

int main

{      
    list<list<char *> > moves; 

    list<char *> pointers;

    list<list<char> > undoValues;
    list<char> undoValue;

    for(list<list<char *> >::iterator outer=moves.begin();outer!=moves.end();outer++)
    {
        for(list<char *>::iterator inner=outer.begin();inner!=outer.end();inner++)
        {

        }
    }
}

我收到 2 个错误:

error 'struct std::_List_iterator<std::list<char*>,std::allocator<char *> > >' has no member named begin

error 'struct std::_List_iterator<std::list<char*>,std::allocator<char *> > >' has no member named end

如何访问嵌套列表?

4

4 回答 4

2

您需要取消引用迭代器以获取元素。您可以使用*->

for(list<char *>::iterator inner=outer->begin();inner!=outer->end();inner++)

或者

for(list<char *>::iterator inner=(*outer).begin();inner!=(*outer).end();inner++)
于 2012-07-19T14:09:28.653 回答
1

您需要使用 (*outer) 来获取迭代器指向的内容:

list<char *> pointers;

list<list<char> > undoValues;
list<char> undoValue;
for(list<list<char *> >::iterator outer=moves.begin();outer!=moves.end();outer++)
{
    for(list<char *>::iterator inner=(*outer).begin();inner!=(*outer).end();inner++)
    {

    }
}
于 2012-07-19T14:08:35.607 回答
1
for(list<list<char *> >::iterator outer=moves.begin();outer!=moves.end();outer++)
    for(list<char *>::iterator inner=outer->begin();inner!=outer->end();inner++)
于 2012-07-19T14:09:15.863 回答
0

要访问迭代器引用的对象的成员,您需要间接;所以列表的begin()成员outerouter->begin(),不是outer.begin()。同样对于end().

于 2012-07-19T14:10:21.133 回答