有没有办法在保留+调整大小
时加快std::vector
的速度?
我希望能够达到与普通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?) 容器,实现了基于堆的固定大小数组?
谢谢
carray
测试需要在其中加入for(std::size_t idx=0; idx<10000000; ++idx) new_a[idx]=0;
。一旦加入后,我怀疑你不会发现明显的变化。 - sbistd::vector
?你会发现,这非常难以得出一个既正确又快速的版本。 - sbi