好的,所以我第一次开始学习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
如何访问嵌套列表?
答案 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()
。