对于简单类型(例如 int、char、void* ...等),您可以利用 ::memcpy
int arr[] = { 1, 2, 3, 4, 5 };
const int CNT = sizeof( arr ) / sizeof( int );
QVector<int> v( CNT );
// memcpy may be faster than std::copy_n in some compiler
::memcpy( v.data(), arr, CNT * sizeof( int ) );
对于对象(例如 std::string ),编写一个循环将对象从 arr 复制到 v
然后一一调用复制构造函数
例如
std::string arr[] = { std::string("a"), std::string("b"), std::string("c") };
const int CNT = sizeof( arr ) / sizeof( std::string );
QVector<std::string> v( CNT );
for( size_t i = 0; i < CNT ; ++i )
v[i] = arr[i];
由于必须逐个调用 arr 中每个对象的复制构造函数,我相信不会有更快的解决方案(即使您使用 std::copy() )。
与某些编译器中的 std::copy 相比,上述代码可能会导致更小的代码大小。