簡體   English   中英

用於2D數組C ++的列迭代器

[英]Column iterators for a 2D array C++

我有一個浮動向量,我將其視為2D數組,聲明為

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());

現在為了能夠使用相同的函數進行列操作,我需要一個列迭代器。 這與通常的向量迭代器基本上是相同的迭代器,除了增量運算符和所有其他類似指針算術的運算符,以寬度的倍數遞增。 電話應該是這樣的

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

其中columnit是列迭代器類,構造為通過寬度步長遞增底層迭代器。

現在,我的問題是,定義這樣一個修改過的迭代器的最簡單方法是什么? 從頭開始定義一個新的迭代器涉及很多樣板,至少如果我希望它甚至是遠程stl兼容的話。 Boost迭代器適配器旨在幫助解決這個問題,而且它顯然是一個選項,但由於我認為我不需要Boost做其他任何事情,這似乎有點矯枉過正。

由於我需要的迭代器的具體修改是如此微不足道,我想會有一個更簡單的方法,就像有人已經制作了我需要的那種適配器?

如果你不想使用boost ,那么easyiset方法就是定義你自己的迭代器

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

並且operator++的主體將按當前列數增加當前索引。

如果要首先使用列迭代單個列或整個數組,則可以使用不同的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM