1#ifndef NEFORCE_CORE_CONTAINER_QUEUE_HPP__
2#define NEFORCE_CORE_CONTAINER_QUEUE_HPP__
14NEFORCE_BEGIN_NAMESPACE__
35template <
typename T,
typename Sequence = deque<T>>
37 static_assert(
is_object_v<T>,
"queue only contains object types.");
64 explicit queue(
const Sequence& other) :
72 seq_(_NEFORCE
move(other)) {}
83 NEFORCE_NODISCARD
size_type size() const noexcept(noexcept(seq_.
size())) {
return seq_.size(); }
89 NEFORCE_NODISCARD
bool empty() const noexcept(noexcept(seq_.
empty())) {
return seq_.empty(); }
125 NEFORCE_NODISCARD
iterator end() noexcept(noexcept(seq_.
end())) {
return seq_.end(); }
157 void push(
const T& value) { seq_.push_back(value); }
165 void push(T&& value) { seq_.push_back(_NEFORCE
move(value)); }
172 void pop() noexcept(noexcept(seq_.pop_front())) { seq_.pop_front(); }
180 template <
typename... Args>
196 NEFORCE_NODISCARD
bool operator==(
const queue& rhs)
const noexcept(
noexcept(seq_ == rhs.seq_)) {
197 return seq_ == rhs.seq_;
205 NEFORCE_NODISCARD
bool operator<(
const queue& rhs)
const noexcept(
noexcept(seq_ < rhs.seq_)) {
206 return seq_ < rhs.seq_;
210#ifdef NEFORCE_STANDARD_17
211template <
typename Sequence>
217NEFORCE_END_NAMESPACE__
NEFORCE_NODISCARD const_reference back() const noexcept(noexcept(seq_.back()))
常量版本,访问队尾元素
typename Sequence::difference_type difference_type
差值类型
NEFORCE_NODISCARD bool operator==(const queue &rhs) const noexcept(noexcept(seq_==rhs.seq_))
相等比较操作符
NEFORCE_NODISCARD iterator begin() noexcept(noexcept(seq_.begin()))
获取起始迭代器
NEFORCE_NODISCARD reference back() noexcept(noexcept(seq_.back()))
访问队尾元素
NEFORCE_NODISCARD const_iterator begin() const noexcept(noexcept(seq_.begin()))
获取常量起始迭代器
typename Sequence::iterator iterator
迭代器类型
NEFORCE_NODISCARD bool empty() const noexcept(noexcept(seq_.empty()))
检查队列是否为空
NEFORCE_NODISCARD iterator end() noexcept(noexcept(seq_.end()))
获取结束迭代器
NEFORCE_NODISCARD reference front() noexcept(noexcept(seq_.front()))
访问队首元素
NEFORCE_NODISCARD const_iterator cend() const noexcept(noexcept(seq_.cend()))
获取常量结束迭代器
queue(Sequence &&other) noexcept(is_nothrow_move_constructible_v< Sequence >)
移动构造函数,使用指定的底层容器
typename Sequence::size_type size_type
大小类型
typename Sequence::const_reference const_reference
常量引用类型
void push(T &&value)
入队操作(移动版本)
typename Sequence::value_type value_type
值类型
NEFORCE_NODISCARD bool operator<(const queue &rhs) const noexcept(noexcept(seq_< rhs.seq_))
小于比较操作符
void pop() noexcept(noexcept(seq_.pop_front()))
出队操作
NEFORCE_NODISCARD const_iterator end() const noexcept(noexcept(seq_.end()))
获取常量结束迭代器
NEFORCE_NODISCARD const_reference front() const noexcept(noexcept(seq_.front()))
常量版本,访问队首元素
void push(const T &value)
入队操作(拷贝版本)
NEFORCE_NODISCARD size_type size() const noexcept(noexcept(seq_.size()))
获取队列大小
decltype(auto) emplace(Args &&... args)
在队尾就地构造元素
void swap(queue &other) noexcept(is_nothrow_swappable_v< Sequence >)
交换两个队列的内容
typename Sequence::reference reference
引用类型
typename Sequence::const_iterator const_iterator
常量迭代器类型
NEFORCE_NODISCARD const_iterator cbegin() const noexcept(noexcept(seq_.cbegin()))
获取常量起始迭代器
queue(const Sequence &other)
构造函数,使用指定的底层容器副本
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的便捷变量模板