52 template <
class Container>
55 using Iterator =
typename Container::iterator;
56 using cIterator =
typename Container::const_iterator;
57 Iterator begin_, end_;
64 Iterator
begin()
const {
return begin_; }
66 Iterator
end()
const {
return end_; }
68 cIterator
cbegin()
const {
return begin_; }
70 cIterator
cend()
const {
return end_; }
77 : begin_(std::
begin(container)), end_(std::
end(container)) {}
85 View(Container &container,
size_t start_pos,
size_t end_pos)
86 : begin_(std::next(std::
begin(container), start_pos)),
87 end_(std::next(std::
begin(container), end_pos)) {}
99 return std::distance(begin_, end_);
109 return *std::next(begin_, pos);
118 auto at(
size_t pos)
const ->
decltype(*begin_)
123 std::to_string(
size() - 1));
131 Container
collect()
const {
return Container(begin_, end_); }
139 template <
class Container>
142 using cIterator =
typename Container::const_iterator;
143 cIterator begin_, end_;
149 cIterator
begin()
const {
return begin_; }
150 cIterator
end()
const {
return end_; }
151 cIterator
cbegin()
const {
return begin_; }
152 cIterator
cend()
const {
return end_; }
158 View(
const Container &container)
159 : begin_(std::
begin(container)), end_(std::
end(container)) {}
167 View(
const Container &container,
168 size_t start_pos,
size_t end_pos)
169 : begin_(std::next(std::
begin(container), start_pos)),
170 end_(std::next(std::
begin(container), end_pos)) {}
181 return std::distance(begin_, end_);
186 return *std::next(begin_, pos);
189 auto at(
size_t pos)
const ->
decltype(*begin_)
194 std::to_string(
size() - 1));
202 Container
collect()
const {
return Container(begin_, end_); }
213 for (
auto it = sv.
begin(); it != sv.
end(); ++it)
248 template <
class Container>
260 template <
class Container>
274 template <
class Container>
277 return {cont, start, end};
288 template <
class Container>
291 return {cont, start, end};
301 template <
class Container>
303 typename Container::iterator end)
315 template <
class Container>
317 typename Container::const_iterator end)
View(const Container &container, size_t start_pos, size_t end_pos)
构造常量容器子区间的视图。
Definition view.h:167
cIterator end() const
Definition view.h:150
Container collect() const
将常量视图中的元素复制到新容器。
Definition view.h:202
auto operator[](size_t pos) const -> decltype(*begin_)
Definition view.h:184
cIterator begin() const
Definition view.h:149
View(const Container &container)
构造整个常量容器的视图。
Definition view.h:158
cIterator cend() const
Definition view.h:152
View(cIterator begin, cIterator end)
从常量迭代器对构造视图。
Definition view.h:177
cIterator iterator
Definition view.h:146
auto at(size_t pos) const -> decltype(*begin_)
Definition view.h:189
cIterator const_iterator
Definition view.h:147
size_t size() const
Definition view.h:179
cIterator cbegin() const
Definition view.h:151
容器的非拥有视图(可变版本)。
Definition view.h:54
Iterator begin() const
返回起始迭代器。
Definition view.h:64
cIterator cbegin() const
返回常量起始迭代器。
Definition view.h:68
Container collect() const
将视图中的元素复制到一个新的容器中。
Definition view.h:131
auto operator[](size_t pos) const -> decltype(*begin_)
无边界检查的下标访问。
Definition view.h:107
View(Iterator begin, Iterator end)
从迭代器对构造视图。
Definition view.h:94
auto at(size_t pos) const -> decltype(*begin_)
带边界检查的下标访问。
Definition view.h:118
cIterator const_iterator
Definition view.h:61
View(Container &container)
构造整个容器的视图。
Definition view.h:76
size_t size() const
返回视图中的元素个数。
Definition view.h:97
Iterator end() const
返回结束迭代器。
Definition view.h:66
View(Container &container, size_t start_pos, size_t end_pos)
构造容器子区间的视图。
Definition view.h:85
cIterator cend() const
返回常量结束迭代器。
Definition view.h:70
Iterator iterator
Definition view.h:60
表示索引越界错误。
Definition csexc.h:150
定义 console 库使用的自定义异常类层次结构。
MultiArray< T, Dims... > operator<<(const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
左移(数组 << 数组)。
Definition multiarray.h:1227
View< Container > make_view(Container &cont)
创建整个容器的视图(可变版本)。
Definition view.h:249