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

标签 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]);

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

最佳答案

只需将数组开始和结束迭代器传递给 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/

相关文章:

C++:我应该如何重新排列这段代码,以便循环检查这两种情况?

arrays - 如何在Unity3d检查器中显示锯齿状数组?

C++ (C++11) 中的函数对象

c++ - 使用 SSD 时,使用一个线程写入 20 个不同的文件比使用 20 个线程更好吗?

c++ - 如何优化字符串复制(内存分配)?

c++ - 多参数构造函数上的显式关键字?

python - 仅查找 numpy 数组末尾的重复项数量

c - 在 C 中创建大型数组时出现段错误

c++ - solaris 上支持 C++11/14 的 GNU gcc/g++ 编译器版本

c++ - C++ 中的函数是否有任何默认返回类型?