1#ifndef NEFORCE_CORE_CONTAINER_STACK_HPP__
2#define NEFORCE_CORE_CONTAINER_STACK_HPP__
14NEFORCE_BEGIN_NAMESPACE__
34template <
typename T,
typename Sequence = deque<T>>
36 static_assert(
is_object_v<T>,
"stack only contains object types.");
62 explicit stack(const Sequence& seq) :
70 seq_(_NEFORCE
move(seq)) {}
76 NEFORCE_NODISCARD
size_type size() const noexcept(noexcept(seq_.
size())) {
return seq_.size(); }
82 NEFORCE_NODISCARD
bool empty() const noexcept(noexcept(seq_.
empty())) {
return seq_.empty(); }
88 NEFORCE_NODISCARD
reference top() noexcept(noexcept(seq_.back())) {
return seq_.back(); }
94 NEFORCE_NODISCARD
const_reference top() const noexcept(noexcept(seq_.back())) {
return seq_.back(); }
102 template <
typename... Args>
128 void pop() noexcept(noexcept(seq_.pop_back())) { seq_.pop_back(); }
141 NEFORCE_NODISCARD
bool equal_to(
const stack& rhs)
const noexcept(
noexcept(seq_ == rhs.seq_)) {
142 return seq_ == rhs.seq_;
150 NEFORCE_NODISCARD
bool less_than(
const stack& rhs)
const noexcept(
noexcept(seq_ < rhs.seq_)) {
151 return seq_ < rhs.seq_;
155#ifdef NEFORCE_STANDARD_17
156template <
typename Sequence>
162NEFORCE_END_NAMESPACE__
bool less_than(const stack &rhs) const noexcept(noexcept(seq_< rhs.seq_))
小于比较操作符
typename Sequence::reference reference
引用类型
reference top() noexcept(noexcept(seq_.back()))
访问栈顶元素
const_reference top() const noexcept(noexcept(seq_.back()))
常量访问栈顶元素
size_type size() const noexcept(noexcept(seq_.size()))
获取栈的大小
stack(Sequence &&seq) noexcept(is_nothrow_move_constructible_v< Sequence >)
移动构造函数,使用指定的底层容器
typename Sequence::const_reference const_reference
常量引用类型
void swap(stack &other) noexcept(is_nothrow_swappable_v< Sequence >)
交换两个栈的内容
typename Sequence::difference_type difference_type
差值类型
bool equal_to(const stack &rhs) const noexcept(noexcept(seq_==rhs.seq_))
相等比较操作符
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)
在栈顶就地构造元素
void push(const value_type &value)
压栈操作(拷贝版本)
bool empty() const noexcept(noexcept(seq_.empty()))
检查栈是否为空
constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
constexpr bool is_object_v
is_object的便捷变量模板
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
constexpr bool is_nothrow_swappable_v
is_nothrow_swappable的便捷变量模板
constexpr bool is_nothrow_move_constructible_v
is_nothrow_move_constructible的便捷变量模板
constexpr bool is_nothrow_move_assignable_v
is_nothrow_move_assignable的便捷变量模板
constexpr bool is_same_v
is_same的便捷变量模板