如果我有一个字符数组,并且我想将数据推送到 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]);
有没有办法一次推送所有数据?
最佳答案
只需将数组开始和结束迭代器传递给 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 进行一次分配,而不是随着 vector 大小的增长而递增分配和复制。
如果您的 vector
在数组之前声明,您可以在循环之前调用 reserve
以确保只发生一次分配。
例如
vec.reserve(distance(begin(test), end(test)));
或者使用 insert
的重载获取一个范围,而不是你的循环。
vec.insert (begin(vec), begin(test), end(test));
另请注意,C++ 数组没有成员函数,因此调用 test.size()
是无效的。 std::array
但是有一个 size
成员函数。
关于c++ - 将原始数组传递给 std::vector 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41009479/