2016-12-07 34 views
0

如果我有一個字符數組,並且我想將數據推送到std::vector,那麼執行此操作的最快方法是什麼?我目前正在使用push_back方法的循環。將原始數組傳遞給std :: vector的最快方法

std::vector<char> vec; 
char test[] = {'0', '1', '2', '3' }; 
for(size_t i = 0; i < test.size(); ++i) 
    vec.push_back(test[i]); 

有沒有辦法一次推送所有數據?

回答

3

只需將數組開始和結束迭代器傳入vector構造函數即可。

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    char test[] = {'0', '1', '2', '3' }; 
    std::vector<char> vec(begin(test), end(test)); 

    for(auto c: vec){ 
     cout << c << '\n'; 
    } 
} 

這將是比你的方法更快,因爲它會只需要載體進行單次分配,而不是增量分配和複製爲載體的規模增長。

如果您的vector在數組之前被聲明,您可以在循環之前調用reserve以確保只發生一次分配。

例如

vec.reserve(distance(begin(test), end(test))); 

或使用insert的超負荷取代範圍,而不是您的循環。

vec.insert (begin(vec), begin(test), end(test)); 

還要注意的是C++陣列沒有成員函數,因此調用test.size()無效。 std::array但是有一個size成員函數。

+0

我想你可以使用'結束(測試) - 開始(測試)'給你的大小。 –

+1

由於C++ 17可以調用['std :: size(test)'](http://en.cppreference.com/w/cpp/iterator/size)。 –

+0

謝謝我只是有點懶,現在更新它取出硬編碼的大小。 –

相關問題