我制作了一些复合容器Range
,它接受最小/最大范围作为 astd::pair
或一组整数作为std::set
.
在内部,它将输入的副本保存为void *
这个容器支持iterators
,我很好奇这个容器与迭代 set 相比有多快std::set
。
我确保使用以下策略编写测试中的每个迭代循环:
- 无后增量(较慢)
- 确保编译器无法完全优化循环
- 比较相同的东西
我有以下时间: 性能测试
速度测试
范围的运行时间:[对]:13.0522 毫秒
范围的运行时间:[设置]:272.54 毫秒
std::set 的运行时间:438.239 毫秒
范围的运行时间:正常 For Loop:0.000175 毫秒
首先
我很惊讶,我也希望你,因为为什么我的Range
容器应该更快,因为Range
包含 bot 的迭代器std::pair
(只是一个整数)和 for的迭代器std::set
。如果是 a ,我的实现Range::iterator
实际上将所有运算符转发到 std::set 。Range
std::set
其次 ,您对执行此操作有任何意见要高效。可能有更好的方法吗?