Hi,
here is small code snippet to demonstrate my problrm:
#include
#include <iostream>
#include
template
class stride_iterator : public boost::iterator_adaptor, T*>
{
public:
stride_iterator()
: stride_iterator::iterator_adaptor_( 0 )
{
}
explicit stride_iterator( T * p )
: stride_iterator::iterator_adaptor_( p )
{
}
private:
friend class boost::iterator_core_access;
void increment()
{
this->base_reference() = this->base() + stride;
}
void deccrement()
{
this->base_reference() = this->base() - stride;
}
void advance( ptrdiff_t d )
{
this->base_reference() = this->base() + d*stride;
}
ptrdiff_t distance_to( stride_iterator const & i ) const
{
return ( i.base() - this->base() )/stride;
}
};
int main()
{
int arr[12] = {};
arr[3*2] = 33;
arr[5*2] = 55;
stride_iterator it( arr );
it[2] = -22;
it[3] = it[5];
std::cout << arr[2*2] << ' ' << arr[3*2] << ' ' << arr[5*2] << '\n';
return 0;
}
It prints "-22 33 55" instead of "-22 55 55" (which I expected) - so "it[3] =
it[5];" assignment didn't modifies array.
Is it intended behaviour? Or maybe I'm doing something wrong?