【发布时间】:2011-09-25 00:32:57
【问题描述】:
我有一些我不拥有的图像,带有相邻的单色像素,我目前使用哑指针增量对其进行迭代。
我现在需要迭代 2D 区域,因此我正在考虑提供高效且易于编写的迭代器的最佳方法。
我只需要 forward_iterator。如果我有一个 10x10 的图像并且我想在 4x3 的左上角区域进行迭代,它将在这些元素上进行迭代:
0 1 2 3 10 11 12 13 20 21 22 23
我有两个选择:
- 用
boost::iterator_facade手写 - 使用
boost::range_iterator,它给了我一个数组迭代器,并用boost::iterator_adaptor修改它的行为
你觉得哪个最好?
【问题讨论】:
-
我没有使用后一种机制,但
iterator_facade使用起来非常简单...... -
如果用户可以选择增加哪个坐标,对用户来说会很方便。因此,
++iter.x和++iter.y将分别增加x和y坐标,++iter将移动迭代器以最终扫描整个二维区域,*iter将取消引用迭代器和产生像素。我没有具体的想法如何实现它。 -
@rwong 好主意,但我真的不需要指定是按行还是按列迭代。我只需要逐行,因为它的缓存效率更高
-
你“不拥有”这些图片是什么意思?
-
@JonasHeidelberg:我的意思是我不负责分配图像的内存,外部库为我提供了指针
标签: c++ arrays boost iterator boost-iterators