提问人:Lithanium 提问时间:10/30/2023 最后编辑:Uwe KeimLithanium 更新时间:10/30/2023 访问量:134
vector.push_back() 非常慢
vector.push_back() being very slow
问:
我参与的项目的时间复杂度为 O(N^3),其中 N 约为 300。我使用的是元组向量,运行所需的时间非常慢,远远超过 5 秒。
我进一步调查并对我的原始程序进行了基本时间测试。
#include <bits/stdc++.h>
using namespace std;
vector<tuple<int, int, int>> pos[305];
int main() {
auto start = clock();
for (int i = 1; i <= 300; i ++) {
for (int j = 1; j <= 300*300; j ++) {
pos[i].push_back({0, 0, 0});
}
}
cout << (double)(clock() - start)/CLOCKS_PER_SEC;
}
上面的这段代码是我使用的代码。平均而言,它运行需要 3.5 秒才能运行。根据先前的知识,vector.push_back() 是摊销的 o(1),因此它大约运行 300^3 = 27000000。即使元组向量的常数因子为 3,该程序也应该在一秒钟内运行良好。
为什么这段代码需要这么长时间才能执行,这与vector.push_back()的速度有关吗?
答: 暂无答案
评论
pos[i].reserve(300*300)
vector.push_back
-O2
std::vector