【发布时间】:2021-04-03 16:56:05
【问题描述】:
我正在尝试从 std::Vector 创建一个 Qvector。
我当然可以使用 for 循环逐个元素地复制它,但我正在寻找更好的方法。
所以我尝试了:
QVector<double> qv = QVector<double>::fromStdVector(values) ;
这很好用,但我收到一条警告说它已被弃用。
我听从了 copying a std::vector to a qvector 的 Hadi Navapour 的建议
并尝试了以下方法:
QVector<double> qv = QVector<double>(values.begin(), values.end());
但是这段带有 begin() 和 end() 的代码无法编译,我收到以下错误:
错误:没有匹配的调用函数 'QVector::QVector(std::vector::iterator, std::vector::iterator)’ QVector qv = QVector(values.begin(), values.end());
我相信这应该使用下面的构造函数QVector(InputIterator first, InputIterator last)
我无法让它工作。
有人能解释一下将 std::vector 复制到 Qvector 的正确方法吗?
提前致谢!
【问题讨论】:
-
在 Qt 5.14 中引入了采用一对迭代器的
QVector构造函数。您可能使用的是早期版本。 -
好点,我会在我的电脑上再次检查我的qt版本并回复你!但假设我使用的是早于 5.14 的版本,并且不想使用已弃用的 fromStdVector,我该怎么办?
-
嗯,
fromStdVector在 Qt 5.14 中已被弃用,正是因为提供了替代品。如果您不能使用任何一个,那么您将在循环中一个一个地推送元素;你可以为此编写一个辅助函数,类似于fromStdVector -
Qvector,qvector,std::Vector-- 谁在乎,只要它编译?哦,等等…… -
@IgorTandetnik,刚刚检查了我的 qt 创建者帮助 > 关于“基于 Qt 5.15.1(GCC 5.3.1 20160406(Red Hat 5.3.1-6),64 位)”我的 qt 5.15应该能够支持迭代器构造函数...我可以手动复制或仅使用已弃用的函数,我只是想知道为什么会出现这种奇怪的行为...