gpt4 book ai didi

c++ - 如何正确迭代QT的STL样式 vector

转载 作者:行者123 更新时间:2023-12-02 10:08:36 25 4
gpt4 key购买 nike

我正在尝试遍历 vector 。

vector 存储器被初始化为最多容纳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

为什么会这样呢?有人可以解释一下吗?

最佳答案

正如@NathanOliver指出的那样,您有两个问题:

  • *itt已经是 vector 的元素,因此它应该只是qDebug() << *itt;
  • 如果您为每个 vector 索引创建一定大小的 vector ,则会创建该 vector 所保存类型的默认元素。这也是为什么在没有默认构造函数的情况下无法对类型使用QVector之类的容器类的原因。在您的情况下, vector 在创建时会填充为1,因为1是int的默认值。然后,您只需覆盖前三个值。

  • 关于您的代码,我还有其他一些担忧:
  • 如果您期望 vector 仅保留与所添加的一样多的值,为什么还要提供 vector 的长度? QVector完全有能力自行管理其存储。您只需要使用QVector::appendQVector::operator<<来添加值,并且 vector 的数量与添加的数量一样多。
  • 在这种情况下,为什么仍要使用STL样式迭代器? QVectorIterator提供了方便的方法来迭代 vector 。它们还使代码更具可读性。

  • 如果我是你,我将编写如下代码:
    #include <QVector>
    #include <QDebug>

    int main() {
    QVector<int> numbers = QVector<int>() << 1 << 2 << 3;
    QVectorIterator<int> itNumbers(numbers);
    while (itNumbers.hasNext()) {
    qDebug() << itNumbers.next();
    }
    }

    关于c++ - 如何正确迭代QT的STL样式 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713241/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com