将 std::vector 复制到 qvector

Posted

技术标签:

【中文标题】将 std::vector 复制到 qvector【英文标题】:copying a std::vector to a qvector 【发布时间】:2013-08-08 15:10:45 【问题描述】:

我尝试使用以下方法将一个向量的内容复制到QVector

std::copy(source.begin(), source.end(), dest.begin());

但是目的地QVector 仍然是空的。

有什么建议吗?

【问题讨论】:

使用QVector::fromStdVector 【参考方案1】:

看看:

std::vector<T> QVector::toStdVector () const

QVector<T> QVector::fromStdVector ( const std::vector<T> & vector ) [static]

From docs

【讨论】:

试过了。作为MyQvector.fromStdVector(MyStedVector);,qvector 仍然是空的 @Rajeshwar:因为它是静态方法,尝试:MyQvector = QVector::fromStdVector( MyStedVector );【参考方案2】:

'fromStdVector' 最近已明确标记为已弃用。 使用以下代码:

std::vector<...> stdVec;

// ...       

QVector<...> qVec = QVector<...>(stdVec.begin(), stdVec.end());

【讨论】:

我真的不明白为什么 QT 团队已经弃用了这个功能。在我的脑海中似乎非常有用且更容易写...【参考方案3】:

如果您要使用std::vector 的内容创建一个新的QVector,您可以使用以下代码作为示例:

   std::vector<T> stdVec;
   QVector<T> qVec = QVector<T>::fromStdVector(stdVec);

【讨论】:

【参考方案4】:

正如提到的其他答案,您应该使用以下方法将QVector 转换为std::vector

std::vector<T> QVector::toStdVector() const

以及将std::vector 转换为QVector 的以下静态方法:

QVector<T> QVector::fromStdVector(const std::vector<T> & vector)

这里是一个如何使用QVector::fromStdVector的例子(取自here):

std::vector<double> stdvector;
stdvector.push_back(1.2);
stdvector.push_back(0.5);
stdvector.push_back(3.14);

QVector<double> vector = QVector<double>::fromStdVector(stdvector);

不要忘记在第二个QVector 之后指定类型(应该是QVector&lt;double&gt;::fromStdVector(stdvector),而不是QVector::fromStdVector(stdvector))。不这样做会给你一个恼人的编译器错误。

【讨论】:

以上是关于将 std::vector 复制到 qvector的主要内容,如果未能解决你的问题,请参考以下文章

再谈QVector与QByteArray——Qt的写时复制(copy on write)技术

再谈QVector与QByteArray——Qt的写时复制(copy on write)技术

将元素从 std::vector 复制到 std::stack c++

将 std::stack 复制到 std::vector

将数据从结构二进制复制到 std::vector

如何在不循环的情况下将数组的内容复制到 C++ 中的 std::vector?