在一个算法挑战网站上进行测试时,我遇到了这样一个问题:当使用range base init时,我的std::unordered_set
速度(稍微慢了一点):
void test(vector<int>& nums1) {
unordered_set<int> set1(nums1.begin(), nums1.end());
}
比
vector<int> test(vector<int>& nums1) {
unordered_set<int> set1;
for (auto num : nums1) {
set1.insert(num);
}
}
怎么解释?
最佳答案
我做了一个简单的基准:
--------------------------------------------------------------------
Benchmark Time CPU Iterations
--------------------------------------------------------------------
from_range<int>/256 13998 ns 13998 ns 50128
from_inserts<int>/256 16543 ns 16542 ns 41822
from_range<int>/512 27573 ns 27573 ns 25060
from_inserts<int>/512 36691 ns 36691 ns 19426
from_range<int>/4096 246584 ns 246584 ns 2881
from_inserts<int>/4096 335115 ns 335111 ns 2111
from_range<int>/32768 2401152 ns 2401123 ns 291
from_inserts<int>/32768 3398496 ns 3398509 ns 204
from_range<int>/262144 29351062 ns 29351113 ns 23
from_inserts<int>/262144 52871572 ns 52871542 ns 12
from_range<int>/1048576 245771472 ns 245772469 ns 3
from_inserts<int>/1048576 445421451 ns 445415603 ns 2
Source code
使用GCC 8.3.0版的
g++ -O3 -m64 -march=native
编译。关于c++ - 基于容器范围的构造函数效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56330387/