为什么我打印的值超出范围?
Why I'm printing value out of range?
考虑这段代码:
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
我想我正在打印范围值,但我不明白如何打印。有人可以指出我的错误吗?
因为要先自增,再测试:
bool move()
{
++it;
if(it != a.end()) {
return true;
}
return false;
}
请注意,在 C++11 中,您可以使用初始化列表来初始化列表 (sic),您也可以就地初始化迭代器。
所以,整件事,固定的,将是:
#include <QtCore>
class Foo123
{
QList<int> a { 1, 2, 3 };
QList<int>::const_iterator it { a.begin() };
public:
void print()
{
qDebug() << *it;
while (move()) qDebug() << *it;
}
bool move()
{
++ it;
return (it != a.end());
}
};
int main() {
Foo123 f;
f.print();
}
考虑这段代码:
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
我想我正在打印范围值,但我不明白如何打印。有人可以指出我的错误吗?
因为要先自增,再测试:
bool move()
{
++it;
if(it != a.end()) {
return true;
}
return false;
}
请注意,在 C++11 中,您可以使用初始化列表来初始化列表 (sic),您也可以就地初始化迭代器。
所以,整件事,固定的,将是:
#include <QtCore>
class Foo123
{
QList<int> a { 1, 2, 3 };
QList<int>::const_iterator it { a.begin() };
public:
void print()
{
qDebug() << *it;
while (move()) qDebug() << *it;
}
bool move()
{
++ it;
return (it != a.end());
}
};
int main() {
Foo123 f;
f.print();
}