【问题标题】:Which is faster c++ vector or python list [closed]哪个是更快的c ++向量或python列表[关闭]
【发布时间】:2020-08-14 11:29:15
【问题描述】:
  1. 创建了一个包含 10000 个元素的向量,初始化为 5,并使用 chrono 计算时间。
        auto startTime = high_resolution_clock::now();
        vector<int> v(10000, 5);
        for(auto& a : v)
                a *= a;
        auto stopTime = high_resolution_clock::now();
        auto duration = duration_cast<nanoseconds>(stopTime - startTime);
        cout<<"time: "<<duration.count()*1000<<" microsec\n";              //98362000 microsec
  1. 创建了一个包含 10000 个元素的列表,初始化为 5。
from datetime import datetime
start = datetime.now()
a = [5]*10000
a = [a ** 2 for a in a]
end = datetime.now()
diff = end - start
print("time: ", diff.microseconds , " microseconds")      //1542 microseconds

从上面看,python 显然是赢家,但作为 c++ 较低级别(我觉得)为什么它的 python 慢?

我知道 chrono 和 datetime 包的时间计算算法可能不同,但是向量(c++)和列表(python)的比较基准是什么?

【问题讨论】:

  • //98362000 微秒,98 秒?你确定吗?
  • 要将纳秒转换为微秒,您需要除以 1000,而不是相乘。您的 C++ 代码实际上比您的 Python 代码花费的时间要少得多。
  • 确保您测试的是优化的发布版本,而不是未优化的调试版本。
  • 请注意,C++ 编译器可能会完全删除您的整个代码,因为它没有做任何有意义的事情。执行时间可能为0。

标签: python c++ list vector


【解决方案1】:

您的 C++ 时间计算不正确。既然你想要微发送,你应该直接询问它们,而不是你现在的计算。这更简单,更正确:

auto duration = duration_cast<microseconds>(stopTime - startTime);
cout << "time: " << duration.count() << " microsec\n"; 

Demo on Compiler Explorer

注意:确保您正在测试优化的构建以获得有用的结果。

【讨论】:

  • 谢谢 但是通过 chrono 和 datetime 包比较时间输出是否很好?
猜你喜欢
  • 2011-12-10
  • 2021-08-23
  • 2012-07-30
  • 2021-09-15
  • 2016-09-28
  • 1970-01-01
  • 2014-04-17
  • 2011-04-13
  • 1970-01-01
相关资源
最近更新 更多