c++ - 二维数组 C++ 的列迭代器

标签 c++ arrays boost stl iterator

我有一个浮点 vector ,我将其视为二维数组,声明为

std::vector<float> vec(height*width);

我正在处理的数值问题需要使用相同的算法在行和列中进行处理,因此我希望能够通过迭代器编写它们,并根据需要输入行迭代器或列迭代器.

为了澄清,这里是访问数组的指针算术版本:

valueatxy = vec[y*width + x];

行迭代器形式当然很简单,假设我有一个函数 template<class iter> void process(iter begin, iter end) , 调用是

process(vec.begin(), vec.end());

现在为了能够对列操作使用相同的函数,我需要一个列迭代器。这与通常的 vector 迭代器本质上是相同的迭代器,只是增量运算符和所有其他类似指针算术的运算符按宽度的倍数递增。电话应该是这样的

process(columnit(vec.begin() + x, width),
columnit(vec.begin() + x + width, width));

在哪里columnit是列迭代器类,构造为按宽度步长递增基础迭代器。

现在,我的问题是,定义这种修改后的迭代器的最简单方法是什么?从头开始定义一个新的迭代器涉及很多样板,至少如果我希望它甚至远程 STL 兼容。 Boost 迭代器适配器旨在帮助解决这个问题,它显然是一个选项,但由于我认为我不需要 Boost 来做任何其他事情,这似乎有点矫枉过正。

由于我需要的迭代器的具体修改是如此微不足道,我想会有一种更简单的方法,比如也许有人已经制作了我需要的那种适配器?

最佳答案

如果你不想使用boost,最简单的方法是定义你自己的迭代器

struct col_iterator : public std::iterator<std::forward_iterator_tag, value_type>

operator++ 的主体会将您当前的索引增加列数。

如果您想在单个列或整个数组上迭代(列在前),您将有不同的实现。

关于c++ - 二维数组 C++ 的列迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015601/

相关文章:

c++ - 后缀评估很慢-优化?

c++ - Boost 编译问题

c++ - 具有多个模板定义的库

c - 我应该使用什么哈希从一组字符串中生成随机值

链表段错误的C++数组

python - 在 Python 中将数组与其自身网格化 n 次

c++ - BOOST_DATA_TEST_CASE是否始终要求 sample 的可打印性?

c++ - 抽象类的大小

c++ - Qi语义 Action 调用错误无匹配函数

c++ - 简单更新索引的循环队列