NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
stack.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_CONTAINER_STACK_HPP__
2#define NEFORCE_CORE_CONTAINER_STACK_HPP__
3
12
14NEFORCE_BEGIN_NAMESPACE__
15
21
34template <typename T, typename Sequence = deque<T>>
35class stack : public icollector<stack<T, Sequence>> {
36 static_assert(is_object_v<T>, "stack only contains object types.");
37 static_assert(is_same_v<T, typename Sequence::value_type>, "stack require consistent types.");
38
39public:
40 using value_type = typename Sequence::value_type;
41 using difference_type = typename Sequence::difference_type;
42 using size_type = typename Sequence::size_type;
43 using reference = typename Sequence::reference;
44 using const_reference = typename Sequence::const_reference;
45
46private:
47 Sequence seq_{};
48
49public:
55 stack() = default;
56
61 explicit stack(const Sequence& seq) :
62 seq_(seq) {}
63
68 explicit stack(Sequence&& seq) noexcept(is_nothrow_move_constructible_v<Sequence>) :
69 seq_(_NEFORCE move(seq)) {}
70
74 ~stack() = default;
75
80 NEFORCE_NODISCARD size_type size() const noexcept(noexcept(seq_.size())) { return seq_.size(); }
81
86 NEFORCE_NODISCARD bool empty() const noexcept(noexcept(seq_.empty())) { return seq_.empty(); }
87
92 NEFORCE_NODISCARD reference top() noexcept(noexcept(seq_.back())) { return seq_.back(); }
93
98 NEFORCE_NODISCARD const_reference top() const noexcept(noexcept(seq_.back())) { return seq_.back(); }
99
106 template <typename... Args>
107 decltype(auto) emplace(Args&&... args) {
108 return seq_.emplace(_NEFORCE forward<Args>(args)...);
109 }
110
117 void push(const value_type& value) { seq_.push_back(value); }
118
125 void push(value_type&& value) { seq_.push_back(_NEFORCE move(value)); }
126
132 void pop() noexcept(noexcept(seq_.pop_back())) { seq_.pop_back(); }
133
138 void swap(stack& other) noexcept(is_nothrow_swappable_v<Sequence>) { _NEFORCE swap(seq_, other.seq_); }
139
145 NEFORCE_NODISCARD bool operator==(const stack& rhs) const noexcept(noexcept(seq_ == rhs.seq_)) {
146 return seq_ == rhs.seq_;
147 }
148
154 NEFORCE_NODISCARD bool operator<(const stack& rhs) const noexcept(noexcept(seq_ < rhs.seq_)) {
155 return seq_ < rhs.seq_;
156 }
157};
158
159#ifdef NEFORCE_STANDARD_17
160template <typename Sequence>
162#endif
163 // Container
165
166NEFORCE_END_NAMESPACE__
167#endif // NEFORCE_CORE_CONTAINER_STACK_HPP__
栈容器适配器
stack()=default
默认构造函数
typename Sequence::reference reference
引用类型
stack(const Sequence &seq)
构造函数,使用指定的底层容器副本
NEFORCE_NODISCARD size_type size() const noexcept(noexcept(seq_.size()))
获取栈的大小
stack(Sequence &&seq) noexcept(is_nothrow_move_constructible_v< Sequence >)
移动构造函数,使用指定的底层容器
~stack()=default
析构函数
NEFORCE_NODISCARD const_reference top() const noexcept(noexcept(seq_.back()))
常量访问栈顶元素
NEFORCE_NODISCARD bool operator==(const stack &rhs) const noexcept(noexcept(seq_==rhs.seq_))
相等比较操作符
typename Sequence::const_reference const_reference
常量引用类型
void swap(stack &other) noexcept(is_nothrow_swappable_v< Sequence >)
交换两个栈的内容
NEFORCE_NODISCARD bool operator<(const stack &rhs) const noexcept(noexcept(seq_< rhs.seq_))
小于比较操作符
typename Sequence::difference_type difference_type
差值类型
NEFORCE_NODISCARD reference top() noexcept(noexcept(seq_.back()))
访问栈顶元素
void pop() noexcept(noexcept(seq_.pop_back()))
弹栈操作
typename Sequence::size_type size_type
大小类型
typename Sequence::value_type value_type
值类型
void push(value_type &&value)
压栈操作(移动版本)
decltype(auto) emplace(Args &&... args)
在栈顶就地构造元素
NEFORCE_NODISCARD bool empty() const noexcept(noexcept(seq_.empty()))
检查栈是否为空
void push(const value_type &value)
压栈操作(拷贝版本)
双端队列容器
NEFORCE_NODISCARD constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
NEFORCE_INLINE17 constexpr bool is_object_v
is_object的便捷变量模板
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
NEFORCE_INLINE17 constexpr bool is_nothrow_swappable_v
is_nothrow_swappable的便捷变量模板
NEFORCE_INLINE17 constexpr bool is_nothrow_move_constructible_v
is_nothrow_move_constructible的便捷变量模板
NEFORCE_INLINE17 constexpr bool is_same_v
is_same的便捷变量模板
集合器接口模板