5

次のコードを実行すると:

QList<int> l;
QList<int>::const_iterator lI;

l.append(1);
l.append(2);
l.append(3);
l.append(4);
lI = l.constEnd();

while(lI != l.constBegin()) {
  std::cout << *lI << std::endl;
  --lI;
}

私はこの出力を得ます:

17
4
3
2

を使用して既に解決しましたQListIterator<int>が、なぜこれが機能しないのか本当にわかりません!

前もって感謝します ...

4

2 に答える 2

7

試す

lI = l.constEnd() - 1;

これで問題が解決するかどうかはわかりませんが、私の知る限り、終了イテレータは常にコンテナの最後を 1 つ過ぎたところを指します。

コメントであなたの懸念に対処したかっただけです。これを行う場合:

lI = l.constEnd();

while(lI != l.constBegin()) {
  std::cout << *lI << std::endl;
  --lI;
}

コンテナの最後から開始すると、ループは決して到達しませんconstBegin。これは、デクリメントすると、lIとなりconstBegin、while ループが実行されないためです。(そのため、1 は出力されません。)

しかし、そうする場合:

lI = l.constBegin();

while(lI != l.constEnd()) {
  std::cout << *lI << std::endl;
  ++lI;
}

に達するとループが終了することを除いて、同じことが起こりますconstEndconstEnd論理的には、コンテナーの末尾を超えていないかのように、それは途切れて 4 を出力しないため、理にかなっています。

于 2013-05-08T13:03:35.440 に答える