有什么方法可以使 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;
}
}
前两个测试慢了两倍(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/