diff --git a/include/sdsl/int_vector_buffer.hpp b/include/sdsl/int_vector_buffer.hpp index 29a2f1081..d4aec79d9 100644 --- a/include/sdsl/int_vector_buffer.hpp +++ b/include/sdsl/int_vector_buffer.hpp @@ -489,12 +489,19 @@ class int_vector_buffer class iterator: public std::iterator { private: - int_vector_buffer& m_ivb; + int_vector_buffer* m_ivb; uint64_t m_idx = 0; public: iterator() = delete; - iterator(int_vector_buffer& ivb, uint64_t idx=0) : m_ivb(ivb), m_idx(idx) {} + iterator(int_vector_buffer& ivb, uint64_t idx=0) : m_ivb(&ivb), m_idx(idx) {} + + iterator& operator=(const iterator& other) + { + m_ivb = other.m_ivb; + m_idx = other.m_idx; + return *this; + } iterator& operator++() { @@ -524,7 +531,7 @@ class int_vector_buffer reference operator*()const { - return m_ivb[m_idx]; + return (*m_ivb)[m_idx]; } iterator& operator+=(difference_type i) @@ -549,7 +556,7 @@ class int_vector_buffer return it += i; } - iterator& operator-(difference_type i) const + iterator operator-(difference_type i) const { iterator it = *this; return it -= i; @@ -557,7 +564,7 @@ class int_vector_buffer bool operator==(const iterator& it) const { - return &m_ivb == &(it.m_ivb) and m_idx == it.m_idx; + return m_ivb == it.m_ivb and m_idx == it.m_idx; } bool operator!=(const iterator& it) const