NumCpp  2.4.0
A Templatized Header Only C++ Implementation of the Python NumPy Library
NdArrayIterators.hpp
Go to the documentation of this file.
1 #pragma once
29 
30 #include "NumCpp/Core/Types.hpp"
31 
32 #include <iterator>
33 
34 namespace nc
35 {
36  //================================================================================
37  // Class Description:
39  template<typename dtype,
40  typename PointerType,
41  typename DifferenceType>
43  {
44  private:
46 
47  public:
48  using iterator_category = std::random_access_iterator_tag;
49  using value_type = dtype;
50  using pointer = PointerType;
51  using reference = const value_type&;
52  using difference_type = DifferenceType;
53 
54  //============================================================================
55  // Method Description:
58  NdArrayConstIterator() = default;
59 
60  //============================================================================
61  // Method Description:
66  explicit NdArrayConstIterator(pointer ptr) noexcept :
67  ptr_(ptr)
68  {}
69 
70  //============================================================================
71  // Method Description:
76  reference operator*() const noexcept
77  {
78  return *ptr_;
79  }
80 
81  //============================================================================
82  // Method Description:
87  pointer operator->() const noexcept
88  {
89  return ptr_;
90  }
91 
92  //============================================================================
93  // Method Description:
98  self_type& operator++() noexcept
99  {
100  ++ptr_;
101  return *this;
102  }
103 
104  //============================================================================
105  // Method Description:
110  self_type operator++(int) noexcept
111  {
112  self_type tmp = *this;
113  ++*this;
114  return tmp;
115  }
116 
117  //============================================================================
118  // Method Description:
123  self_type& operator--() noexcept
124  {
125  --ptr_;
126  return *this;
127  }
128 
129  //============================================================================
130  // Method Description:
135  self_type operator--(int) noexcept
136  {
137  self_type tmp = *this;
138  --*this;
139  return tmp;
140  }
141 
142  //============================================================================
143  // Method Description:
149  self_type& operator+=(const difference_type offset) noexcept
150  {
151  ptr_ += offset;
152  return *this;
153  }
154 
155  //============================================================================
156  // Method Description:
162  self_type operator+(const difference_type offset) const noexcept
163  {
164  self_type tmp = *this;
165  return tmp += offset;
166  }
167 
168  //============================================================================
169  // Method Description:
175  self_type& operator-=(const difference_type offset) noexcept
176  {
177  return *this += -offset;
178  }
179 
180  //============================================================================
181  // Method Description:
187  self_type operator-(const difference_type offset) const noexcept
188  {
189  self_type tmp = *this;
190  return tmp -= offset;
191  }
192 
193  //============================================================================
194  // Method Description:
200  difference_type operator-(const self_type& rhs) const noexcept
201  {
202  return ptr_ - rhs.ptr_;
203  }
204 
205  //============================================================================
206  // Method Description:
212  reference operator[](const difference_type offset) const noexcept
213  {
214  return *(*this + offset);
215  }
216 
217  //============================================================================
218  // Method Description:
224  bool operator==(const self_type& rhs) const noexcept
225  {
226  return ptr_ == rhs.ptr_;
227  }
228 
229  //============================================================================
230  // Method Description:
236  bool operator!=(const self_type& rhs) const noexcept
237  {
238  return !(*this == rhs);
239  }
240 
241  //============================================================================
242  // Method Description:
248  bool operator<(const self_type& rhs) const noexcept
249  {
250  return ptr_ < rhs.ptr_;
251  }
252 
253  //============================================================================
254  // Method Description:
260  bool operator>(const self_type& rhs) const noexcept
261  {
262  return rhs < *this;
263  }
264 
265  //============================================================================
266  // Method Description:
272  bool operator<=(const self_type& rhs) const noexcept
273  {
274  return !(rhs < *this);
275  }
276 
277  //============================================================================
278  // Method Description:
284  bool operator>=(const self_type& rhs) const noexcept
285  {
286  return !(*this < rhs);
287  }
288 
289  private:
290  pointer ptr_{};
291  };
292 
293  //============================================================================
294  // Method Description:
301  template <class dtype,
302  typename PointerType,
303  typename DifferenceType>
307  {
308  return next += offset;
309  }
310 
311  //================================================================================
312  // Class Description:
314  template<typename dtype,
315  typename PointerType,
316  typename DifferenceType>
317  class NdArrayIterator : public NdArrayConstIterator<dtype, PointerType, DifferenceType>
318  {
319  private:
322 
323  public:
324  using iterator_category = std::random_access_iterator_tag;
325  using value_type = dtype;
326  using pointer = PointerType;
328  using difference_type = DifferenceType;
329 
330  using MyBase::MyBase;
331 
332  //============================================================================
333  // Method Description:
338  reference operator*() const noexcept
339  {
340  return const_cast<reference>(MyBase::operator*());
341  }
342 
343  //============================================================================
344  // Method Description:
349  pointer operator->() const noexcept
350  {
351  return const_cast<pointer>(MyBase::operator->());
352  }
353 
354  //============================================================================
355  // Method Description:
360  self_type& operator++() noexcept
361  {
363  return *this;
364  }
365 
366  //============================================================================
367  // Method Description:
372  self_type operator++(int) noexcept
373  {
374  self_type tmp = *this;
376  return tmp;
377  }
378 
379  //============================================================================
380  // Method Description:
385  self_type& operator--() noexcept
386  {
388  return *this;
389  }
390 
391  //============================================================================
392  // Method Description:
397  self_type operator--(int) noexcept
398  {
399  self_type tmp = *this;
401  return tmp;
402  }
403 
404  //============================================================================
405  // Method Description:
411  self_type& operator+=(const difference_type offset) noexcept
412  {
413  MyBase::operator+=(offset);
414  return *this;
415  }
416 
417  //============================================================================
418  // Method Description:
424  self_type operator+(const difference_type offset) const noexcept
425  {
426  self_type tmp = *this;
427  return tmp += offset;
428  }
429 
430  //============================================================================
431  // Method Description:
437  self_type& operator-=(const difference_type offset) noexcept
438  {
439  MyBase::operator-=(offset);
440  return *this;
441  }
442 
443  using MyBase::operator-;
444 
445  //============================================================================
446  // Method Description:
452  self_type operator-(const difference_type offset) const noexcept
453  {
454  self_type tmp = *this;
455  return tmp -= offset;
456  }
457 
458  //============================================================================
459  // Method Description:
465  reference operator[](const difference_type offset) const noexcept
466  {
467  return const_cast<reference>(MyBase::operator[](offset));
468  }
469  };
470 
471  //============================================================================
472  // Method Description:
479  template <class dtype,
480  typename PointerType,
481  typename DifferenceType>
485  {
486  return next += offset;
487  }
488 
489  //================================================================================
490  // Class Description:
492  template<typename dtype,
493  typename SizeType,
494  typename PointerType,
495  typename DifferenceType>
497  {
498  private:
500 
501  public:
502  using iterator_category = std::random_access_iterator_tag;
503  using value_type = dtype;
504  using size_type = SizeType;
505  using pointer = PointerType;
506  using reference = const value_type&;
507  using difference_type = DifferenceType;
508 
509  //============================================================================
510  // Method Description:
513  NdArrayConstColumnIterator() = default;
514 
515  //============================================================================
516  // Method Description:
523  NdArrayConstColumnIterator(pointer ptr, SizeType numRows, SizeType numCols) noexcept :
524  ptr_(ptr),
525  currPtr_(ptr),
526  numRows_(static_cast<difference_type>(numRows)),
527  numCols_(static_cast<difference_type>(numCols)),
528  size_(numRows_ * numCols_)
529  {}
530 
531  //============================================================================
532  // Method Description:
537  reference operator*() const noexcept
538  {
539  return *currPtr_;
540  }
541 
542  //============================================================================
543  // Method Description:
548  pointer operator->() const noexcept
549  {
550  return currPtr_;
551  }
552 
553  //============================================================================
554  // Method Description:
559  self_type& operator++() noexcept
560  {
561  return *this += 1;
562  }
563 
564  //============================================================================
565  // Method Description:
570  self_type operator++(int) noexcept
571  {
572  self_type tmp = *this;
573  ++*this;
574  return tmp;
575  }
576 
577  //============================================================================
578  // Method Description:
583  self_type& operator--() noexcept
584  {
585  return *this -= 1;
586  }
587 
588  //============================================================================
589  // Method Description:
594  self_type operator--(int) noexcept
595  {
596  self_type tmp = *this;
597  --*this;
598  return tmp;
599  }
600 
601  //============================================================================
602  // Method Description:
608  self_type& operator+=(const difference_type offset) noexcept
609  {
610  currPtr_ = colIdx2Ptr(ptr2ColIdx(currPtr_) + offset);
611  return *this;
612  }
613 
614  //============================================================================
615  // Method Description:
621  self_type operator+(const difference_type offset) const noexcept
622  {
623  self_type tmp = *this;
624  return tmp += offset;
625  }
626 
627  //============================================================================
628  // Method Description:
634  self_type& operator-=(const difference_type offset) noexcept
635  {
636  return *this += -offset;
637  }
638 
639  //============================================================================
640  // Method Description:
646  self_type operator-(const difference_type offset) const noexcept
647  {
648  self_type tmp = *this;
649  return tmp -= offset;
650  }
651 
652  //============================================================================
653  // Method Description:
659  difference_type operator-(const self_type& rhs) const noexcept
660  {
661  return ptr2ColIdx(currPtr_) - ptr2ColIdx(rhs.currPtr_);
662  }
663 
664  //============================================================================
665  // Method Description:
671  reference operator[](const difference_type offset) const noexcept
672  {
673  return *(*this + offset);
674  }
675 
676  //============================================================================
677  // Method Description:
683  bool operator==(const self_type& rhs) const noexcept
684  {
685  return currPtr_ == rhs.currPtr_;
686  }
687 
688  //============================================================================
689  // Method Description:
695  bool operator!=(const self_type& rhs) const noexcept
696  {
697  return !(*this == rhs);
698  }
699 
700  //============================================================================
701  // Method Description:
707  bool operator<(const self_type& rhs) const noexcept
708  {
709  return *this - rhs < 0;
710  }
711 
712  //============================================================================
713  // Method Description:
719  bool operator>(const self_type& rhs) const noexcept
720  {
721  return *this - rhs > 0;
722  }
723 
724  //============================================================================
725  // Method Description:
731  bool operator<=(const self_type& rhs) const noexcept
732  {
733  return !(rhs < *this);
734  }
735 
736  //============================================================================
737  // Method Description:
743  bool operator>=(const self_type& rhs) const noexcept
744  {
745  return !(*this < rhs);
746  }
747 
748  private:
749  pointer ptr_{};
750  pointer currPtr_{};
751  difference_type numRows_{ 0 };
752  difference_type numCols_{ 0 };
753  difference_type size_{ 0 };
754 
755  //============================================================================
756  // Method Description:
762  difference_type ptr2ColIdx(pointer ptr) const noexcept
763  {
764  if (ptr == nullptr)
765  {
766  return size_;
767  }
768 
769  const auto rowIdx = ptr - ptr_;
770  if (rowIdx >= size_)
771  {
772  return size_;
773  }
774 
775  const auto row = rowIdx / numCols_;
776  const auto col = rowIdx % numCols_;
777  return row + col * numRows_;
778  }
779 
780  //============================================================================
781  // Method Description:
787  pointer colIdx2Ptr(difference_type colIdx) const noexcept
788  {
789  if (colIdx >= size_)
790  {
791  return nullptr;
792  }
793 
794  const auto row = colIdx % numRows_;
795  const auto col = colIdx / numRows_;
796  const auto rowIdx = col + row * numCols_;
797  return ptr_ + rowIdx;
798  }
799  };
800 
801  //============================================================================
802  // Method Description:
809  template <class dtype,
810  typename SizeType,
811  typename PointerType,
812  typename DifferenceType>
816  {
817  return next += offset;
818  }
819 
820  //================================================================================
821  // Class Description:
823  template<typename dtype,
824  typename SizeType,
825  typename PointerType,
826  typename DifferenceType>
827  class NdArrayColumnIterator : public NdArrayConstColumnIterator<dtype, SizeType, PointerType, DifferenceType>
828  {
829  private:
832 
833  public:
834  using iterator_category = std::random_access_iterator_tag;
835  using value_type = dtype;
836  using size_type = SizeType;
837  using pointer = PointerType;
839  using difference_type = DifferenceType;
840 
841  using MyBase::MyBase;
842 
843  //============================================================================
844  // Method Description:
849  reference operator*() const noexcept
850  {
851  return const_cast<reference>(MyBase::operator*());
852  }
853 
854  //============================================================================
855  // Method Description:
860  pointer operator->() const noexcept
861  {
862  return const_cast<pointer>(MyBase::operator->());
863  }
864 
865  //============================================================================
866  // Method Description:
871  self_type& operator++() noexcept
872  {
874  return *this;
875  }
876 
877  //============================================================================
878  // Method Description:
883  self_type operator++(int) noexcept
884  {
885  self_type tmp = *this;
887  return tmp;
888  }
889 
890  //============================================================================
891  // Method Description:
896  self_type& operator--() noexcept
897  {
899  return *this;
900  }
901 
902  //============================================================================
903  // Method Description:
908  self_type operator--(int) noexcept
909  {
910  self_type tmp = *this;
912  return tmp;
913  }
914 
915  //============================================================================
916  // Method Description:
922  self_type& operator+=(const difference_type offset) noexcept
923  {
924  MyBase::operator+=(offset);
925  return *this;
926  }
927 
928  //============================================================================
929  // Method Description:
935  self_type operator+(const difference_type offset) const noexcept
936  {
937  self_type tmp = *this;
938  return tmp += offset;
939  }
940 
941  //============================================================================
942  // Method Description:
948  self_type& operator-=(const difference_type offset) noexcept
949  {
950  MyBase::operator-=(offset);
951  return *this;
952  }
953 
954  using MyBase::operator-;
955 
956  //============================================================================
957  // Method Description:
963  self_type operator-(const difference_type offset) const noexcept
964  {
965  self_type tmp = *this;
966  return tmp -= offset;
967  }
968 
969  //============================================================================
970  // Method Description:
976  reference operator[](const difference_type offset) const noexcept
977  {
978  return const_cast<reference>(MyBase::operator[](offset));
979  }
980  };
981 
982  //============================================================================
983  // Method Description:
990  template <class dtype,
991  typename SizeType,
992  typename PointerType,
993  typename DifferenceType>
997  {
998  return next += offset;
999  }
1000 } // namespace nc
nc::NdArrayIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:424
nc::NdArrayColumnIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:839
nc::NdArrayColumnIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:896
nc::NdArrayConstIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:123
nc::NdArrayConstColumnIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:634
nc::NdArrayConstColumnIterator::operator<=
bool operator<=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:731
nc::NdArrayIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:437
nc::NdArrayIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:328
nc::NdArrayColumnIterator
Custom column iterator for NdArray.
Definition: NdArrayIterators.hpp:827
nc::operator+
NdArrayConstIterator< dtype, PointerType, DifferenceType > operator+(typename NdArrayConstIterator< dtype, PointerType, DifferenceType >::difference_type offset, NdArrayConstIterator< dtype, PointerType, DifferenceType > next) noexcept
Definition: NdArrayIterators.hpp:304
nc::NdArrayIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:465
nc::NdArrayColumnIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:976
nc::NdArrayColumnIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:849
nc::NdArrayConstColumnIterator::NdArrayConstColumnIterator
NdArrayConstColumnIterator()=default
nc::NdArrayColumnIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:935
nc::NdArrayIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:397
nc::NdArrayColumnIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:922
nc::NdArrayConstColumnIterator::size_type
SizeType size_type
Definition: NdArrayIterators.hpp:504
nc::NdArrayConstColumnIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:507
nc::NdArrayConstIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:135
nc::NdArrayConstIterator::operator<
bool operator<(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:248
nc::NdArrayColumnIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:871
nc::NdArrayConstIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:187
nc::NdArrayConstIterator::NdArrayConstIterator
NdArrayConstIterator()=default
nc::NdArrayConstIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:162
nc::NdArrayConstIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:76
nc::NdArrayConstIterator::iterator_category
std::random_access_iterator_tag iterator_category
Definition: NdArrayIterators.hpp:48
nc::NdArrayConstColumnIterator::operator>=
bool operator>=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:743
nc::NdArrayConstColumnIterator::pointer
PointerType pointer
Definition: NdArrayIterators.hpp:505
nc::NdArrayIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:360
nc::NdArrayConstColumnIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:583
nc::NdArrayConstColumnIterator
Custom column const_iterator for NdArray.
Definition: NdArrayIterators.hpp:496
nc::NdArrayConstIterator::operator>
bool operator>(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:260
nc::NdArrayConstColumnIterator::iterator_category
std::random_access_iterator_tag iterator_category
Definition: NdArrayIterators.hpp:502
nc::NdArrayConstColumnIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:537
nc::NdArrayConstColumnIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:570
nc::NdArrayConstIterator::reference
const value_type & reference
Definition: NdArrayIterators.hpp:51
nc::NdArrayConstIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:98
nc::NdArrayConstColumnIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:646
nc::NdArrayConstIterator::value_type
dtype value_type
Definition: NdArrayIterators.hpp:49
nc::NdArrayConstColumnIterator::operator++
self_type & operator++() noexcept
Definition: NdArrayIterators.hpp:559
nc::NdArrayConstColumnIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:608
nc::NdArrayConstIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:87
nc::NdArrayIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:372
nc::NdArrayConstIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:110
nc::NdArrayConstColumnIterator::operator!=
bool operator!=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:695
nc::NdArrayConstColumnIterator::operator<
bool operator<(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:707
nc
Definition: Coordinate.hpp:44
nc::NdArrayConstColumnIterator::value_type
dtype value_type
Definition: NdArrayIterators.hpp:503
nc::NdArrayConstColumnIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:548
nc::NdArrayConstIterator
Custom const_iterator for NdArray.
Definition: NdArrayIterators.hpp:42
nc::NdArrayColumnIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:963
nc::NdArrayConstIterator::operator<=
bool operator<=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:272
nc::NdArrayIterator
Custom iterator for NdArray.
Definition: NdArrayIterators.hpp:317
nc::NdArrayConstColumnIterator::NdArrayConstColumnIterator
NdArrayConstColumnIterator(pointer ptr, SizeType numRows, SizeType numCols) noexcept
Definition: NdArrayIterators.hpp:523
nc::NdArrayConstIterator::operator!=
bool operator!=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:236
nc::NdArrayConstColumnIterator::operator==
bool operator==(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:683
nc::NdArrayIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:411
nc::NdArrayConstIterator::operator-
difference_type operator-(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:200
nc::NdArrayConstColumnIterator::operator-
difference_type operator-(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:659
nc::NdArrayColumnIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:860
nc::NdArrayConstIterator::operator+=
self_type & operator+=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:149
nc::NdArrayIterator::operator--
self_type & operator--() noexcept
Definition: NdArrayIterators.hpp:385
nc::NdArrayIterator::operator*
reference operator*() const noexcept
Definition: NdArrayIterators.hpp:338
nc::NdArrayConstColumnIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:594
nc::NdArrayConstIterator::NdArrayConstIterator
NdArrayConstIterator(pointer ptr) noexcept
Definition: NdArrayIterators.hpp:66
nc::NdArrayConstColumnIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:671
nc::NdArrayIterator::operator-
self_type operator-(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:452
Types.hpp
nc::NdArrayConstColumnIterator::reference
const value_type & reference
Definition: NdArrayIterators.hpp:506
nc::NdArrayConstIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:175
nc::NdArrayConstIterator::pointer
PointerType pointer
Definition: NdArrayIterators.hpp:50
nc::NdArrayConstColumnIterator::operator>
bool operator>(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:719
nc::NdArrayIterator::operator->
pointer operator->() const noexcept
Definition: NdArrayIterators.hpp:349
nc::NdArrayColumnIterator::operator++
self_type operator++(int) noexcept
Definition: NdArrayIterators.hpp:883
nc::NdArrayConstIterator::operator==
bool operator==(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:224
nc::NdArrayColumnIterator::operator--
self_type operator--(int) noexcept
Definition: NdArrayIterators.hpp:908
nc::NdArrayConstColumnIterator::operator+
self_type operator+(const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:621
nc::NdArrayConstIterator::difference_type
DifferenceType difference_type
Definition: NdArrayIterators.hpp:52
nc::NdArrayConstIterator::operator>=
bool operator>=(const self_type &rhs) const noexcept
Definition: NdArrayIterators.hpp:284
nc::NdArrayConstIterator::operator[]
reference operator[](const difference_type offset) const noexcept
Definition: NdArrayIterators.hpp:212
nc::NdArrayColumnIterator::operator-=
self_type & operator-=(const difference_type offset) noexcept
Definition: NdArrayIterators.hpp:948