我正在尝试迭代一个向量。
向量存储器初始化为最多可容纳10个元素
现在我分配了前3个元素并尝试在QT中使用STL样式迭代器打印它们。
#include <QDebug>
int main() {
QVector<int> vv(10);
vv[0] = 1;
vv[1] = 2;
vv[2] = 3;
QVector<int>::iterator itt;
for (itt = vv.begin(); itt != vv.end(); ++itt) {
qDebug() << vv.at(*itt);
}
}
输出很奇怪: 这不是1 2 3 而是它的2 3 0 1 1 1 1 1 1 1
为什么会这样?你能解释一下吗?
答案 0 :(得分:0)
@NathanOliver指出您有两个问题:
*itt
已经是向量的元素,因此它应该只是qDebug() << *itt;
。QVector
之类的容器类的原因。在您的情况下,向量在创建时用1填充,因为1是int
的默认值。然后,您只需覆盖前三个值即可。我对您的代码还有其他担忧:
QVector
非常有能力自己管理其存储。您只需使用QVector::append
或QVector::operator<<
来添加值,并且向量具有与您添加的值一样多的值。QVectorIterator
提供了一种方便的方法来迭代向量。它们还使代码更具可读性。如果我是你,我将编写如下代码:
#include <QVector>
#include <QDebug>
int main() {
QVector<int> numbers = QVector<int>() << 1 << 2 << 3;
QVectorIterator<int> itNumbers(numbers);
while (itNumbers.hasNext()) {
qDebug() << itNumbers.next();
}
}