标准库标头 <deque>
来自cppreference.com
此头文件是容器库的一部分。
包含 | ||
(C++20) | 三路比较运算符支持 | |
(C++11) | std::initializer_list 类模板 | |
类 | ||
双端队列 (类模板) | ||
函数 | ||
(C++20 移除)(C++20 移除)(C++20 移除)(C++20 移除)(C++20 移除)(C++20) | 按照字典顺序比较两个 deque 的值 (函数模板) | |
特化 std::swap 算法 (函数模板) | ||
擦除所有满足特定判别标准的元素 (函数模板) | ||
范围访问 | ||
(C++11)(C++14) | 返回指向容器或数组起始的迭代器 (函数模板) | |
(C++11)(C++14) | 返回指向容器或数组结尾的迭代器 (函数模板) | |
(C++14) | 返回指向一个容器或数组的逆向迭代器 (函数模板) | |
(C++14) | 返回容器或数组的逆向尾迭代器 (函数模板) | |
(C++17)(C++20) | 返回容器或数组的大小 (函数模板) | |
(C++17) | 检查容器是否为空 (函数模板) | |
(C++17) | 获得指向底层数组的指针 (函数模板) |
[编辑]概要
#include <compare>#include <initializer_list> namespace std {// 类模板 dequetemplate<class T, class Allocator = allocator<T>>class deque; template<class T, class Allocator>bool operator==(const deque<T, Allocator>& x, const deque<T, Allocator>& y);template<class T, class Allocator>/*synth-three-way-result*/<T> operator<=>(const deque<T, Allocator>& x, const deque<T, Allocator>& y); template<class T, class Allocator>void swap(deque<T, Allocator>& x, deque<T, Allocator>& y)noexcept(noexcept(x.swap(y))); // 擦除template<class T, class Allocator, class U = T>typename deque<T, Allocator>::size_type erase(deque<T, Allocator>& c, const U& value);template<class T, class Allocator, class Predicate>typename deque<T, Allocator>::size_type erase_if(deque<T, Allocator>& c, Predicate pred); namespace pmr {template<class T>using deque =std::deque<T, polymorphic_allocator<T>>;}}
[编辑]类模板 std::deque
namespace std {template<class T, class Allocator = allocator<T>>class deque {public:// 类型using value_type = T;using allocator_type = Allocator;using pointer =typename allocator_traits<Allocator>::pointer;using const_pointer =typename allocator_traits<Allocator>::const_pointer;using reference = value_type&;using const_reference =const value_type&;using size_type =/* 由实现定义 */;using difference_type =/* 由实现定义 */;using iterator =/* 由实现定义 */;using const_iterator =/* 由实现定义 */;using reverse_iterator =std::reverse_iterator<iterator>;using const_reverse_iterator =std::reverse_iterator<const_iterator>; // 构造/复制/销毁 deque(): deque(Allocator()){}explicit deque(const Allocator&);explicit deque(size_type n, const Allocator&= Allocator()); deque(size_type n, const T& value, const Allocator&= Allocator());template<class InputIter> deque(InputIter first, InputIter last, const Allocator&= Allocator());template<container-compatible-range<T> R> deque(from_range_t, R&& rg, const Allocator&= Allocator()); deque(const deque& x); deque(deque&&); deque(const deque&, const type_identity_t<Allocator>&); deque(deque&&, const type_identity_t<Allocator>&); deque(initializer_list<T>, const Allocator&= Allocator()); ~deque(); deque& operator=(const deque& x); deque& operator=(deque&& x)noexcept( allocator_traits<Allocator>::is_always_equal::value); deque& operator=(initializer_list<T>);template<class InputIter>void assign(InputIter first, InputIter last);template<container-compatible-range<T> R>void assign_range(R&& rg);void assign(size_type n, const T& t);void assign(initializer_list<T>); allocator_type get_allocator()constnoexcept; // 迭代器 iterator begin()noexcept; const_iterator begin()constnoexcept; iterator end()noexcept; const_iterator end()constnoexcept; reverse_iterator rbegin()noexcept; const_reverse_iterator rbegin()constnoexcept; reverse_iterator rend()noexcept; const_reverse_iterator rend()constnoexcept; const_iterator cbegin()constnoexcept; const_iterator cend()constnoexcept; const_reverse_iterator crbegin()constnoexcept; const_reverse_iterator crend()constnoexcept; // 容量bool empty()constnoexcept; size_type size()constnoexcept; size_type max_size()constnoexcept;void resize(size_type sz);void resize(size_type sz, const T& c);void shrink_to_fit(); // 元素访问 reference operator[](size_type n); const_reference operator[](size_type n)const; reference at(size_type n); const_reference at(size_type n)const; reference front(); const_reference front()const; reference back(); const_reference back()const; // 修改器template<class... Args> reference emplace_front(Args&&... args);template<class... Args> reference emplace_back(Args&&... args);template<class... Args> iterator emplace(const_iterator position, Args&&... args); void push_front(const T& x);void push_front(T&& x);template<container-compatible-range<T> R>void prepend_range(R&& rg);void push_back(const T& x);void push_back(T&& x);template<container-compatible-range<T> R>void append_range(R&& rg); iterator insert(const_iterator position, const T& x); iterator insert(const_iterator position, T&& x); iterator insert(const_iterator position, size_type n, const T& x);template<class InputIter> iterator insert(const_iterator position, InputIter first, InputIter last);template<container-compatible-range<T> R> iterator insert_range(const_iterator position, R&& rg); iterator insert(const_iterator position, initializer_list<T>); void pop_front();void pop_back(); iterator erase(const_iterator position); iterator erase(const_iterator first, const_iterator last);void swap(deque&)noexcept(allocator_traits<Allocator>::is_always_equal::value);void clear()noexcept;}; template<class InputIter, class Allocator = allocator</*iter-value-type*/<InputIter>>> deque(InputIter, InputIter, Allocator = Allocator())-> deque</*iter-value-type*/<InputIter>, Allocator>; template<ranges::input_range R, class Allocator = allocator<ranges::range_value_t<R>>> deque(from_range_t, R&&, Allocator = Allocator())-> deque<ranges::range_value_t<R>, Allocator>;}