设计一个简单的矩阵C++迭代器需要考虑以下几个方面:
下面是一个简单的矩阵迭代器的实现:
#include <iostream>
#include <vector>
class Matrix {
public:
using value_type = int;
using size_type = std::size_t;
using reference = value_type&;
using const_reference = const value_type&;
Matrix(size_type rows, size_type cols) : data(rows * cols), rows_(rows), cols_(cols) {}
class Iterator {
public:
using iterator_category = std::random_access_iterator_tag;
using value_type = Matrix::value_type;
using difference_type = std::ptrdiff_t;
using pointer = value_type*;
using reference = value_type&;
Iterator(pointer ptr) : ptr_(ptr) {}
reference operator*() const { return *ptr_; }
pointer operator->() { return ptr_; }
Iterator& operator++() { ++ptr_; return *this; }
Iterator operator++(int) { Iterator tmp = *this; ++ptr_; return tmp; }
friend bool operator== (const Iterator& a, const Iterator& b) { return a.ptr_ == b.ptr_; };
friend bool operator!= (const Iterator& a, const Iterator& b) { return a.ptr_ != b.ptr_; };
private:
pointer ptr_;
};
Iterator begin() { return Iterator(&data[0]); }
Iterator end() { return Iterator(&data[rows_ * cols_]); }
reference operator()(size_type row, size_type col) { return data[row * cols_ + col]; }
const_reference operator()(size_type row, size_type col) const { return data[row * cols_ + col]; }
private:
std::vector<value_type> data;
size_type rows_;
size_type cols_;
};
int main() {
Matrix mat(3, 3);
int count = 0;
for (auto& elem : mat) {
elem = count++;
}
for (size_t i = 0; i < 3; ++i) {
for (size_t j = 0; j < 3; ++j) {
std::cout << mat(i, j) << " ";
}
std::cout << std::endl;
}
return 0;
}
data
,以及行数rows_
和列数cols_
。通过这种方式,可以实现一个简单且高效的矩阵迭代器,适用于各种矩阵操作场景。
领取专属 10元无门槛券
手把手带您无忧上云