C++ - STL vector 问题

标签 c++ performance arrays vector

有什么方法可以使 std::vectorreserving + resizing 上更快?

我希望达到与普通 C 数组相当的性能。

查看以下代码片段:

TEST(test, vector1) {
   for (int i = 0; i < 50; ++i) {
      std::vector<int> a;
      a.reserve(10000000);
      a.resize(10000000);
   }
}

TEST(test, vector2) {
   for (int i = 0; i < 50; ++i) {
      std::vector<int> a(10000000);
   }
}

TEST(test, carray) {
   for (int i = 0; i < 50; ++i) {
      int* new_a = new int[10000000];
      delete[] new_a;
   }
}

前两个测试慢了两倍(4095 ms vs 2101 ms),显然,这是因为 std::vector 将其中的元素置空。 关于如何避免这种情况的任何想法?

或者可能有一些标准的(boost?)容器实现了一个固定大小和基于堆的数组?

谢谢

最佳答案

当然,前 2 个测试比较慢。他们显式地遍历整个 vector 并在每个元素上调用“int()”。编辑:这具有将所有元素设置为“0”的效果。

只需尝试预订即可。

在我刚才问的这个问题中,有一些与你的问题非常相关的信息:

std::vector reserve() and push_back() is faster than resize() and array index, why?

关于C++ - STL vector 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3100997/

相关文章:

c - 计算C中数字符号相反的最快方法

Javascript框架困惑

javascript - Javascript 中的过滤逻辑 - 查找数组中的值范围

c++ - 数组中的最大连续重复

C++如何使用其中也包含此类的类中的枚举

c++ - 调用模板祖 parent 的成员函数

java - 比双重嵌套的 ArrayList 更有效?

javascript - 将文件名和文件类型放在一个数组中

c++ - 使用 RtAudio 进行音频平移

c++ - '候选模板被忽略:无法使用 std::set 推断模板参数'