我有一個管理數據的類。爲非STL容器創建我自己的迭代器
我希望只返回其中的一部分數據,但由於它是一個多次完成的過程,我不希望只複製容器內的數據並返回容器。
這將是很好,如果我只能發送參考或類似的東西。迭代想到。但因爲我使用Eigen3矩陣(不具有迭代器(二維矩陣反正))
我想到的模擬迭代器行爲, 類似的東西(?):
typedef unsigned int Index;
class MatrixIterator
{
public:
MatrixIterator(Eigen::MatrixXd *m, Index min, Index max):
_col(0), _index(0), _min(min), _max(max), _matrix(m)
{}
void operator++()
{
if (_index + _min + 1 != _max)
_index++;
}
void operator--()
{
if (_index != _min)
_index--;
}
double operator*()
{
return _matrix->operator() (_index + _min, _col);
}
void setCol(Index col) { _col = col; }
Index min() { return _min; }
Index max() { return _max; }
private:
// the matrix is 2D we can select
// on which column we want to iterate
Index _col;
// current position
Index _index;
// select the range on which the user can iterate
Index _max;
Index _min;
// the matrix on which we want to iterate over
Eigen::MatrixXd* _matrix;
}
- 我從來沒有真正使用過迭代器,它是正確的嗎?
- 我可以從
std::iterator
繼承我的MatrixIterator
,因此stl
能夠將其理解爲通常的迭代器嗎? - 你知道更好的方法來做類似的事嗎?
我已閱讀:
- Creating my own Iterators - 它並沒有真正說話實現迭代器,因爲它們使用矢量迭代器
- http://www.cplusplus.com/reference/iterator/
- How to use iterator to iterate a 2D vector?
編輯:我想只迭代矩陣的一部分(這就是爲什麼我有_min和_max),我操縱的數據ulating是時間序列,所以數據已經訂購了。 我認爲我們可以將MatrixIterator視爲對數據查詢的響應。
我將嘗試boost :: iterator_facade。 謝謝~~ – Setepenre
+1 boost :: iterator_facade。我之前使用過那個,它工作得非常好。有點繁瑣寫,但偉大的閱讀和使用。 –
我只是想補充一點,如果你不想把自己綁定到boost庫,你可以很容易地重現一個類似'iterator_facace'的類,只需查找源代碼以獲得靈感並重現它。 –