2016-12-07 32 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

谢谢我只是有点懒,现在更新它取出硬编码的大小。 –

相关问题