C++ - STL矢量问题

Yip*_*Yay 3 c++ arrays performance vector

有没有办法std::vector加快速度reserving + 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Goz*_*Goz 11

当然,前两个测试速度较慢.它们显式遍历整个向量并在每个元素上调用"int()".编辑:这具有将所有元素设置为"0"的效果.

试试保留.

在我回答这个问题时,你的问题有一些非常相关的信息:

std :: vector reserve()和push_back()比resize()和数组索引更快,为什么?