如果我有一组字符并且我想将数据推送到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]);
有没有办法一次推送所有数据?
答案 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
成员函数。