将原始数组传递给std :: vector的最快方法

时间:2016-12-07 04:33:58

标签: c++ arrays c++11 vector containers

如果我有一组字符并且我想将数据推送到std::vector,那么最快的方法是什么?我目前正在使用push_back方法的循环。

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

有没有办法一次推送所有数据?

1 个答案:

答案 0 :(得分: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以确保只发生一次分配。

e.g。

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

或使用范围的insert重载,而不是循环。

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

另请注意,c ++数组没有成员函数,因此调用test.size()无效。 std::array但是有一个size成员函数。