python - c++ vector.push_back 比 python list.append 慢
问题描述
c++向量push_back一亿个元素,耗时20秒。
c++ list push_back 一亿个元素,会崩溃。
python list追加一亿个元素,耗时9秒。
蟒蛇代码示例。
import time
if __name__ == '__main__':
start = time.time()
s = []
for i in xrange(100000000): # one hundred million
s.append(1)
stop = time.time()
print(stop - start) # second
c++ 代码示例。
#include <iostream>
#include <algorithm>
#include <vector>
#include <chrono>
using std::vector;
using std::find;
using std::cout;
using std::endl;
using std::chrono::steady_clock;
using std::chrono::duration_cast;
using std::chrono::nanoseconds;
int main(void) {
auto start = steady_clock::now();
auto max_size = 100000000; // one hundred million
vector<int> b(max_size);
for (int i = 0; i < max_size; ++i) {
b.push_back(1);
}
auto end = steady_clock::now();
auto nano = duration_cast<nanoseconds>(end - start);
cout << "elapsed(nano seconds): " << nano.count();
<< "; vector.size: " << b.size() << endl;
return 0;
}
我不知道为什么 c++ vector/list 比 python list 慢。
谢谢大家,我改成vector<int> b(max_size)
/ vector<int> b; b.reserve(max_size);
O2并启用优化,它似乎非常快,只需要100毫秒。
解决方案
推荐阅读
- geometry - 如何在多边形(可能是凹多边形)中找到视点可以最边缘的多边形的视点?
- python - Tensorflow 的 Eager 模式下的性能测量
- sql-server - 带有大文件的 TempDB - 性能问题
- java - 我的媒体播放器播放列表仅在 android studio 的列表视图中复制一首歌曲 下面是我的播放列表代码
- ios - 自定义类以更改多个 VC 中的背景;类型“class”没有成员“x”
- ios - 如何调试 APIService 的代码
- flask-sqlalchemy - 为什么不能在烧瓶上创建迁移?
- html - ReactJS如何使用罗马数字格式创建列表“ol”或“ul”
- c# - 在 Azure Function 中从 Azure SQL 访问几何列时出错
- python - 如何让 Bokeh HTML 可视化显示在 WordPress 上?