我从函数接收一个数组作为指针,并希望从中初始化一个 QVector。
现在我这样做:
void foo(double* receivedArray, size_t size)
{
QVector<double> vec(size);
std::copy(receivedArray, receivedArray + size, std::begin(vec));
}
这样做是否同样可能:
void foo(double* receivedArray, size_t size)
{
QVector<double> vec(size);
vec.data() = receivedArray;
}
这会破坏某种我不知道的 Qt 机制吗?
第一个做了不必要的工作,在填充之前用默认构造的双精度值初始化向量。不幸的是,QVector 缺乏范围插入,因此您必须求助于算法:
void foo(double* receivedArray, size_t size)
{
QVector<double> vec;
vec.reserve(size); // warning: size_t->int cast
std::copy(receivedArray, receivedArray + size, std::back_inserter(vec));
}
第二个版本甚至无法编译,因为data()
返回一个T *
,这是一个右值,不能放在赋值的左侧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)