/
rokhin
/
Small_test_programs_cpp
Обзор
Документация
Войти
/
rokhin
/
Small_test_programs_cpp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ArraySpan.cpp
58 строк
2 KB
sergeyrokhin
Начало
03 фев 2025, 13:36
03 фев 2025, 13:36
e354b68
Код
Авторство
О чём код?
template <typename T> struct ArraySpan { ArraySpan(T * arr, size_t arr_size) : data_{arr}, size_{arr_size} {} ArraySpan(T * arr_begin, T * arr_end) : data_{arr_begin}, size_{std::distance(arr_begin, arr_end)} {} T& operator()(std::size_t i) { return *(data_ + i); } size_t size() const {return size_;} T * data() {return data_;} private: T * data_; size_t size_; }; template <typename T> struct Matrix { Matrix() = default; Matrix(size_t rows, size_t cols, T init) : ROWS{rows}, COLS{cols}, data(ROWS * COLS, init) {} Matrix(Matrix const&) = default; ArraySpan<T> operator()(std::size_t row) { return ArraySpan{data.data() + row * COLS, COLS}; } T& operator()(std::size_t row, std::size_t col) { return data[row * COLS + col]; } std::vector<T>& underlying_array() { return data; } size_t row_count() const { return ROWS;} size_t col_count() const { return COLS;} private: size_t ROWS; size_t COLS; std::vector<T> data; }; int main() { Matrix mtrx(4, 5, 0); auto& interval_buffer = mtrx.underlying_array(); std::iota(interval_buffer.begin(), interval_buffer.end(), 0); for (int i = 0; i < mtrx.row_count(); ++i) { for (int j = 0; j < mtrx.col_count(); ++j) { std::cout << std::setw(2) << mtrx(i, j) << " "; } std::cout << std::endl; } std::cout << std::endl; for (int i = 0; i < mtrx.row_count(); ++i) { auto row = mtrx(i); for (int j = 0; j < row.size(); ++j) { std::cout << std::setw(2) << row(j) << " "; } std::cout << std::endl; } }