데이터를 관리하는 클래스가 있습니다.비 Stl 컨테이너 용 자체 반복자 만들기
내부에있는 데이터의 일부만 반환하고 싶지만 여러 번 수행되는 프로세스이므로 컨테이너 안의 데이터를 복사하고 컨테이너를 반환하지 않으려합니다.
참조 나 비슷한 것을 보낼 수 있다면 좋을 것입니다. 반복자가 떠오른다. 하지만 사용하기 때문에 Eigen3 매트릭스 (어쨌든 반복자 (2D 매트릭스를하지 않는))
내가 반복자 행동, 그런 것을 모방 생각하고 (?) :
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;
}
- 이전에는 반복기를 사용한 적이 없었습니다. 맞습니까?
- 내
MatrixIterator
을std::iterator
에서 상속 할 수 있습니까? 따라서stl
은 일반적인 반복자로 이해할 수 있습니까? - 비슷한 것을하는 더 좋은 방법을 알고 계십니까?
는 내가 읽고 :
- Creating my own Iterators - 정말 반복자를 구현하는 말을하지 않는 그들이 벡터 반복자를 사용하기 때문에
- http://www.cplusplus.com/reference/iterator/
- How to use iterator to iterate a 2D vector?
편집 : 내가 원하는 행렬의 일부만 반복합니다 (즉, _min 및 _max가있는 이유입니다), 내가 조작하는 데이터 데이터는 이미 주문되어 있으므로 시계열입니다. 우리는 데이터 쿼리에 대한 응답으로 MatrixIterator를 고려할 수 있다고 생각합니다.
나는 boost :: iterator_facade를 시도 할 것이다. 부스트 :: iterator_facade에 대해 ~ – Setepenre
+1을 주셔서 감사합니다. 전에 그걸 사용했는데 아주 잘 작동했습니다. 쓰기가 약간 지루하지만 읽고 읽고 사용하는 것이 좋습니다. –
부스트 라이브러리에 묶지 않으려면'iterator_facace'와 비슷한 클래스를 쉽게 재현하고 영감을위한 소스 코드를 찾아 재현하면됩니다. –