如何在c ++中访问列表中的列表?

时间:2012-07-19 14:05:42

标签: c++

好的,所以我第一次开始学习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 个答案:

答案 0 :(得分:2)

您需要取消引用迭代器才能访问该元素。您可以使用*->

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

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

答案 1 :(得分: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++)
    {

    }
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

要访问迭代器引用的对象成员,需要间接;因此begin()列表的outer成员为outer->begin(),而非outer.begin()。同样适用于end()