c++deque详解
STL deque容器
一、简单介绍
$ deque$ 的存储空间并不是连续的。内部的实现通常是一种特殊的数据结构,被称为分段数组。允许在两端进行高效的插入与删除操作,同时还支持随机访问。(支持随机访问是因为dequedequedeque 维护了一个中央目录,其中存储了指向每个块的指针)
二、定义与使用
-
创建一个没有任何元素的空deque容器
-
std::deque<int> d
-
-
创建一个具有n个元素,默认值为m的deque
-
std::deque<int> d(n,m);
-
-
通过拷贝的方式创建一个新的deque
-
std::deque<int> d2(d1); //d1是以及存在的deque
-
-
拷贝其他类型的指定区域的元素
-
//拷贝普通数组,创建deque容器 int a[] = { 1,2,3,4,5 }; std::deque<int>d(a, a + 5); //适用于所有类型的容器 std::array<int, 5>arr{ 11,12,13,14,15 }; std::deque<int>d(arr.begin()+2, arr.end());//拷贝arr容器中的{13,14,15}
-
三、遍历方式
-
索引for循环
-
for(std::size_t i=0;i<mydeque ;i++){ std::cout<<mydeque[i]<<std::endl; }
-
-
基础for循环
-
for(const auto & i:mydeque){ std::cout<<i<<std::endl; }
-
-
迭代器 for遍历
-
for(auto it=mydeque.begin();it!=mydeque;it++){ std::cout<<*it<<std::endl; }
-
四、相关函数
-
assignassignassign 函数
-
void assign(InputIterator First,InputIterator Last) //First 要从参数deque中复制一系列元素的第一个元素 //Last 超出deque中复制一系列元素的第一个元素 -
void assign(size_type Count,const Type& Val); //Count 要插入deque中的元素副本的个数 // 插入到deque中的元素的值 -
void assign(initializer_list <Type> IList); //IList 要插入deque中的initializer_list
-
-
atatat 函数
-
reference at(size_type pos); const_reference at(size_type pos);//返回deque中指定位置的元素的引用 //溢出抛出std::out_of_range 的异常
-
-
backbackback 函数
-
reference back(); const_reference back() const;//返回对deque中最后一个元素的引用
-
-
frontfrontfront 函数
-
reference front(); const_reference front() const;//返回对deque中第一个元素的引用
-
-
beginbeginbegin 函数
-
const_iterator begin() const; iterator begin();//发现 deque 中第一个元素或空 deque 之后的位置的随机访问迭代器
-
-
endendend 函数
-
const_iterator end() const; iterator end();
-
-
cbegincbegincbegin 函数
-
const_iterator cbegin() const; //返回确定范围中第一个元素地址的 const 迭代器
-
-
cendcendcend 函数
-
const_iterator cend() const; //返回一个 const 迭代器,此迭代器用于发现刚超出范围中最后一个元素的位置
-
-
clearclearclear 函数
-
void clear();//清除deque所有函数
-
-
emplaceemplaceemplace 将构造的元素放到指定位置的dequedequedeque 中
-
iterator emplace( const_iterator _Where, Type&& val); // _where 插入第一个元素的位置 // val 插入到deque 中的元素的值 //该函数将返回一个指向 deque 中新元素的插入位置的迭代器。
-
-
emplace_backemplace\_backemplace_back 函数
-
void emplace_back(Type&& val);// val 添加到 deque 末尾的元素
-
-
emplace_frontemplace\_frontemplace_front 函数
-
void emplace_front(Type&& val); //val 要添加到 deque 开头的元素
-
-
emptyemptyempty 函数
-
bool empty() const; //如果 deque 为空,则为 true;如果 deque 不为空,则为 false
-
-
eraseeraseerase 函数
-
iterator erase(iterator _Where); iterator erase(iterator first, iterator last); // _where 要从 deque 中移除的元素的位置 // first 要从 deque 中移除的第一个元素的位置 //last 要从 deque 中移除的刚超出最后一个元素的位置
-
-
$insert $ 函数
-
iterator insert( const_iterator Where, const Type& Val); iterator insert( const_iterator Where, Type&& Val); // && 在这里就是使用move()函数进行传参,减少不必要空间的浪费 void insert( iterator Where, size_type Count, const Type& Val); template <class InputIterator> void insert( iterator Where, InputIterator First, InputIterator Last); iterator insert( iterator Where,initializer_list<Type> IList);
-
-
max_sizemax\_sizemax_size 函数
-
size_type max_size() const; //返回deque的最大长度
-
-
pop_backpop\_backpop_back 函数
-
void pop_back(); //删除deque末尾处的元素
-
-
pop_frontpop\_frontpop_front 函数
-
void pop_front(); //删除deque开头的元素
-
-
push_backpush\_backpush_back 函数
-
void push_back(const Type& val); void push_back(Type&& val);//将元素添加到deque的末尾
-
-
push_frontpush\_frontpush_front 函数
-
void push_front(const Type& val); void push_front(Type&& val); //将元素添加到开头
-
-
resizeresizeresize 函数
-
void resize(size_type _Newsize); void resize(size_type _Newsize, Type val);//为deque指定大小
-
-
sizesizesize 函数
-
size_type size() const; //返回deque中的元素数量
-
-
swapswapswap 函数
-
void swap(deque<Type, Allocator>& right); //直接交换两个队列
-
更多推荐


所有评论(0)