このコード考えてみましょう:なぜ値が範囲外で印刷されていますか?
class Foo123
{
QList<int> a = (QList<int>()) << 1 << 2 << 3;
QList<int>::const_iterator it;
public:
Foo123()
{
it = a.begin();
}
void print()
{
qDebug() << *it;
while(move())
{
qDebug() << *it;
}
}
bool move()
{
if(it != a.end())
{
++it;
return true;
}
return false;
}
};
Foo123 f;
f.print();
私はいつもそのように、印刷の最後に余分な番号を取得しています:
1
2
3
58713 // this is random, from what I can tell
私は範囲の値を印刷していますが、私はdidnの推測方法を理解していない。誰かが私の間違いを指摘できますか?あなたが最初にインクリメントする必要があるため
。基本的に最後の値として 'a.end()'を表示しています。 – vu1p3n0x
'a.end()'は最後の要素を指すのではなく、「過去と最後の」イテレータであり、逆参照されるべきではないという混乱が生じるかもしれません。 – vu1p3n0x
@ vu1p3n0x:私はa.end()が最後の要素を指していないことを逃したと思います... – Jack