2

我制作了一些复合容器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 。Rangestd::set

其次 ,您对执行此操作有任何意见要高效。可能有更好的方法吗?

4

1 回答 1

0

随着 dyp 的评论:std::set 更快!

速度测试 ============================
范围的运行时间:[对]:8.69353 毫秒
范围的运行时间:[设置]:281.202 毫秒
std::set 的 RUNTIME: 220.367 ms // 重新复制了
范围的 std::set RUNTIME: Normal For Loop: 0.000196 ms

于 2014-06-05T11:45:19.097 回答