DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
da_array_table.hpp
1#ifndef DA_ARRAY_TABLE_H
2#define DA_ARRAY_TABLE_H
3
4#include <array>
5#include <utility>
6
7namespace DA
8{
9
20template< typename T, std::size_t RowN, std::size_t ColN >
22{
23public:
24 using value_type = T; // 元素类型
25 using row_type = std::array< T, ColN >; // 行类型
26 using table_index_type = std::pair< std::size_t, std::size_t >; // 索引类型
27
28 // 迭代器类型定义
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;
34
35public:
36 // 构造函数
37 da_array_table(); // 默认构造函数
38
39 // 元素访问
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; // 带边界检查的元素访问(常量版本)
44
45 // 迭代器访问
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; // 返回指向末尾的常量反向迭代器
58
59 // 容量操作
60 bool empty() const noexcept; // 检查表格是否为空
61 size_type size() const noexcept; // 返回元素数量
62 size_type max_size() const noexcept; // 返回最大可能元素数量
63
64 // 表格操作
65 table_index_type shape() const; // 获取表格形状
66 std::size_t row_count() const; // 获取行数
67 std::size_t column_count() const; // 获取列数
68
69 // 其他操作
70 void fill(const T& value); // 填充表格
71 void swap(da_array_table& other) noexcept; // 交换两个表格的内容
72
73private:
74 std::array< row_type, RowN > data_; // 数据存储
75};
76
77// ============================================================================
78// 实现部分
79// ============================================================================
80
91template< typename T, std::size_t RowN, std::size_t ColN >
95
111template< typename T, std::size_t RowN, std::size_t ColN >
112T& da_array_table< T, RowN, ColN >::operator()(std::size_t row, std::size_t col)
113{
114 return data_[ row ][ col ];
115}
116
131template< typename T, std::size_t RowN, std::size_t ColN >
132const T& da_array_table< T, RowN, ColN >::operator()(std::size_t row, std::size_t col) const
133{
134 return data_[ row ][ col ];
135}
136
157template< typename T, std::size_t RowN, std::size_t ColN >
158T& da_array_table< T, RowN, ColN >::at(std::size_t row, std::size_t col)
159{
160 if (row >= RowN || col >= ColN) {
161 throw std::out_of_range("Index out of range");
162 }
163 return data_[ row ][ col ];
164}
165
186template< typename T, std::size_t RowN, std::size_t ColN >
187const T& da_array_table< T, RowN, ColN >::at(std::size_t row, std::size_t col) const
188{
189 if (row >= RowN || col >= ColN) {
190 throw std::out_of_range("Index out of range");
191 }
192 return data_[ row ][ col ];
193}
194
211template< typename T, std::size_t RowN, std::size_t ColN >
212typename da_array_table< T, RowN, ColN >::iterator da_array_table< T, RowN, ColN >::begin() noexcept
213{
214 return data_.begin();
215}
216
233template< typename T, std::size_t RowN, std::size_t ColN >
234typename da_array_table< T, RowN, ColN >::const_iterator da_array_table< T, RowN, ColN >::begin() const noexcept
235{
236 return data_.begin();
237}
238
255template< typename T, std::size_t RowN, std::size_t ColN >
256typename da_array_table< T, RowN, ColN >::const_iterator da_array_table< T, RowN, ColN >::cbegin() const noexcept
257{
258 return data_.cbegin();
259}
260
275template< typename T, std::size_t RowN, std::size_t ColN >
276typename da_array_table< T, RowN, ColN >::iterator da_array_table< T, RowN, ColN >::end() noexcept
277{
278 return data_.end();
279}
280
295template< typename T, std::size_t RowN, std::size_t ColN >
296typename da_array_table< T, RowN, ColN >::const_iterator da_array_table< T, RowN, ColN >::end() const noexcept
297{
298 return data_.end();
299}
300
315template< typename T, std::size_t RowN, std::size_t ColN >
316typename da_array_table< T, RowN, ColN >::const_iterator da_array_table< T, RowN, ColN >::cend() const noexcept
317{
318 return data_.cend();
319}
320
337template< typename T, std::size_t RowN, std::size_t ColN >
338typename da_array_table< T, RowN, ColN >::reverse_iterator da_array_table< T, RowN, ColN >::rbegin() noexcept
339{
340 return data_.rbegin();
341}
342
359template< typename T, std::size_t RowN, std::size_t ColN >
360typename da_array_table< T, RowN, ColN >::const_reverse_iterator da_array_table< T, RowN, ColN >::rbegin() const noexcept
361{
362 return data_.rbegin();
363}
364
381template< typename T, std::size_t RowN, std::size_t ColN >
382typename da_array_table< T, RowN, ColN >::const_reverse_iterator da_array_table< T, RowN, ColN >::crbegin() const noexcept
383{
384 return data_.crbegin();
385}
386
401template< typename T, std::size_t RowN, std::size_t ColN >
402typename da_array_table< T, RowN, ColN >::reverse_iterator da_array_table< T, RowN, ColN >::rend() noexcept
403{
404 return data_.rend();
405}
406
421template< typename T, std::size_t RowN, std::size_t ColN >
422typename da_array_table< T, RowN, ColN >::const_reverse_iterator da_array_table< T, RowN, ColN >::rend() const noexcept
423{
424 return data_.rend();
425}
426
441template< typename T, std::size_t RowN, std::size_t ColN >
442typename da_array_table< T, RowN, ColN >::const_reverse_iterator da_array_table< T, RowN, ColN >::crend() const noexcept
443{
444 return data_.crend();
445}
446
463template< typename T, std::size_t RowN, std::size_t ColN >
465{
466 return data_.empty();
467}
468
482template< typename T, std::size_t RowN, std::size_t ColN >
483typename da_array_table< T, RowN, ColN >::size_type da_array_table< T, RowN, ColN >::size() const noexcept
484{
485 return data_.size() * ColN;
486}
487
501template< typename T, std::size_t RowN, std::size_t ColN >
502typename da_array_table< T, RowN, ColN >::size_type da_array_table< T, RowN, ColN >::max_size() const noexcept
503{
504 return data_.max_size() * ColN;
505}
506
521template< typename T, std::size_t RowN, std::size_t ColN >
522typename da_array_table< T, RowN, ColN >::table_index_type da_array_table< T, RowN, ColN >::shape() const
523{
524 return { RowN, ColN };
525}
526
540template< typename T, std::size_t RowN, std::size_t ColN >
542{
543 return RowN;
544}
545
559template< typename T, std::size_t RowN, std::size_t ColN >
561{
562 return ColN;
563}
564
577template< typename T, std::size_t RowN, std::size_t ColN >
579{
580 for (auto& row : data_) {
581 row.fill(value);
582 }
583}
584
598template< typename T, std::size_t RowN, std::size_t ColN >
600{
601 data_.swap(other.data_);
602}
603
604} // namespace DA
605
606#endif // DA_ARRAY_TABLE_H
基于 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