1#ifndef DA_ARRAY_TABLE_H
2#define DA_ARRAY_TABLE_H
20template<
typename T, std::
size_t RowN, std::
size_t ColN >
25 using row_type = std::array< T, ColN >;
26 using table_index_type = std::pair< std::size_t, std::size_t >;
29 using iterator =
typename std::array< row_type, RowN >::iterator;
30 using const_iterator =
typename std::array< row_type, RowN >::const_iterator;
31 using reverse_iterator =
typename std::array< row_type, RowN >::reverse_iterator;
32 using const_reverse_iterator =
typename std::array< row_type, RowN >::const_reverse_iterator;
33 using size_type =
typename std::array< row_type, RowN >::size_type;
40 T&
operator()(std::size_t row, std::size_t col);
41 const T&
operator()(std::size_t row, std::size_t col)
const;
42 T&
at(std::size_t row, std::size_t col);
43 const T&
at(std::size_t row, std::size_t col)
const;
46 iterator
begin()
noexcept;
47 const_iterator
begin()
const noexcept;
48 const_iterator
cbegin()
const noexcept;
49 iterator
end()
noexcept;
50 const_iterator
end()
const noexcept;
51 const_iterator
cend()
const noexcept;
52 reverse_iterator
rbegin()
noexcept;
53 const_reverse_iterator
rbegin()
const noexcept;
54 const_reverse_iterator
crbegin()
const noexcept;
55 reverse_iterator
rend()
noexcept;
56 const_reverse_iterator
rend()
const noexcept;
57 const_reverse_iterator
crend()
const noexcept;
60 bool empty()
const noexcept;
61 size_type
size()
const noexcept;
65 table_index_type
shape()
const;
70 void fill(
const T& value);
74 std::array< row_type, RowN > data_;
91template<
typename T, std::
size_t RowN, std::
size_t ColN >
111template<
typename T, std::
size_t RowN, std::
size_t ColN >
114 return data_[ row ][ col ];
131template<
typename T, std::
size_t RowN, std::
size_t ColN >
134 return data_[ row ][ col ];
157template<
typename T, std::
size_t RowN, std::
size_t ColN >
160 if (row >= RowN || col >= ColN) {
161 throw std::out_of_range(
"Index out of range");
163 return data_[ row ][ col ];
186template<
typename T, std::
size_t RowN, std::
size_t ColN >
189 if (row >= RowN || col >= ColN) {
190 throw std::out_of_range(
"Index out of range");
192 return data_[ row ][ col ];
211template<
typename T, std::
size_t RowN, std::
size_t ColN >
214 return data_.begin();
233template<
typename T, std::
size_t RowN, std::
size_t ColN >
236 return data_.begin();
255template<
typename T, std::
size_t RowN, std::
size_t ColN >
258 return data_.cbegin();
275template<
typename T, std::
size_t RowN, std::
size_t ColN >
295template<
typename T, std::
size_t RowN, std::
size_t ColN >
315template<
typename T, std::
size_t RowN, std::
size_t ColN >
337template<
typename T, std::
size_t RowN, std::
size_t ColN >
340 return data_.rbegin();
359template<
typename T, std::
size_t RowN, std::
size_t ColN >
362 return data_.rbegin();
381template<
typename T, std::
size_t RowN, std::
size_t ColN >
384 return data_.crbegin();
401template<
typename T, std::
size_t RowN, std::
size_t ColN >
421template<
typename T, std::
size_t RowN, std::
size_t ColN >
441template<
typename T, std::
size_t RowN, std::
size_t ColN >
444 return data_.crend();
463template<
typename T, std::
size_t RowN, std::
size_t ColN >
466 return data_.empty();
482template<
typename T, std::
size_t RowN, std::
size_t ColN >
485 return data_.size() * ColN;
501template<
typename T, std::
size_t RowN, std::
size_t ColN >
504 return data_.max_size() * ColN;
521template<
typename T, std::
size_t RowN, std::
size_t ColN >
524 return { RowN, ColN };
540template<
typename T, std::
size_t RowN, std::
size_t ColN >
559template<
typename T, std::
size_t RowN, std::
size_t ColN >
577template<
typename T, std::
size_t RowN, std::
size_t ColN >
580 for (
auto& row : data_) {
598template<
typename T, std::
size_t RowN, std::
size_t ColN >
601 data_.swap(other.data_);
基于 std::array 的固定大小二维表格数据结构
Definition da_array_table.hpp:22
std::size_t column_count() const
获取列数
Definition da_array_table.hpp:560
T & operator()(std::size_t row, std::size_t col)
函数调用运算符访问元素
Definition da_array_table.hpp:112
std::size_t row_count() const
获取行数
Definition da_array_table.hpp:541
table_index_type shape() const
获取表格形状
Definition da_array_table.hpp:522
da_array_table()
默认构造函数
Definition da_array_table.hpp:92
size_type max_size() const noexcept
返回最大可能元素数量
Definition da_array_table.hpp:502
const_reverse_iterator crend() const noexcept
返回指向末尾的常量反向迭代器
Definition da_array_table.hpp:442
iterator begin() noexcept
返回指向起始的迭代器
Definition da_array_table.hpp:212
const_iterator cend() const noexcept
返回指向末尾的常量迭代器
Definition da_array_table.hpp:316
const_iterator cbegin() const noexcept
返回指向起始的常量迭代器
Definition da_array_table.hpp:256
iterator end() noexcept
返回指向末尾的迭代器
Definition da_array_table.hpp:276
bool empty() const noexcept
检查表格是否为空
Definition da_array_table.hpp:464
size_type size() const noexcept
返回元素数量
Definition da_array_table.hpp:483
void fill(const T &value)
填充表格
Definition da_array_table.hpp:578
reverse_iterator rbegin() noexcept
返回指向起始的反向迭代器
Definition da_array_table.hpp:338
void swap(da_array_table &other) noexcept
交换两个表格的内容
Definition da_array_table.hpp:599
const_reverse_iterator crbegin() const noexcept
返回指向起始的常量反向迭代器
Definition da_array_table.hpp:382
reverse_iterator rend() noexcept
返回指向末尾的反向迭代器
Definition da_array_table.hpp:402
T & at(std::size_t row, std::size_t col)
带边界检查的元素访问
Definition da_array_table.hpp:158
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44