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

イテレータが指しているものを取得するには、(* external)を使用する必要があります。

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 に答える