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()和数组索引更快,为什么?