首页 > 解决方案 > 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毫秒。

标签: pythonc++

解决方案


推荐阅读