簡體   English   中英

std :: vector ::為QVector分配等價物

[英]std::vector::assign equivalent for QVector

我有一個C風格的數組,我想將它分配給QVector。 如果我使用std :: vector,我會使用assign()

int arr[] = { 1, 2, 3, 4, 5 };
std::vector<int> v;
v.assign(arr, arr + sizeof(arr)/sizeof(int));

但對於QVector我找不到類似的assign()方法或任何范圍接受構造函數。

我已經編寫了一個for循環來編寫它,但我很驚訝沒有這樣的基本功能,是真的如此,還是有相同的功能?

你可以使用Qt的qCopy()

int arr[] = { 1, 2, 3, 4, 5 };
QVector<int> v(5);
qCopy(arr, arr+5, v.begin());

或者你可以使用std::copy()當然。

int arr[] = { 1, 2, 3, 4, 5 };
QVector<int> v(5);
std::copy_n( &arr, 5, v.begin() );
// or more general:
QVector<int> v2;
std::copy(std::begin(arr), std::end(arr), std::back_inserter(v2));
// without begin/end
std::copy(arr, arr + 5, std::back_inserter(v2));

fromStdVector() ,它允許你從std::vector創建一個QVector

int arr[] = { 1, 2, 3, 4, 5 };
std::vector<int> v;
v.assign(arr, arr + sizeof(arr) / sizeof(arr[0]));
QVector<int> qvec = QVector<int>::fromStdVector(v);

對於簡單類型(例如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

然后一個一個地調用copy-constructors

例如

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相比,上面的代碼可能會導致更小的代碼大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM