C++,STL,deque 常用函数介绍

C++ STL,常说的容器可以分为三大部分,序列式容器,关联式容器,容器适配器。这篇文章记录一下序列式容器中的 deque

1、deque 双端队列 直观效果

deque 容器以模板类 deque<T>(T 为存储元素的类型)的形式在 <deque> 头文件中,并位于 std 命名空间中。因此,在使用该容器之前,代码中需要包含下面两行代码:

#include <deque>
using namespace std;
//或者 std::deque

和 vector 不同的是,deque 还擅长在序列头部添加或删除元素,所耗费的时间复杂度也为常数阶O(1)。并且更重要的一点是,deque 容器中存储元素并不能保证所有元素都存储到连续的内存空间中。

2、deque 的构造函数

创建 deque 容器,根据不同的实际场景,可选择使用如下几种方式。

1) 空容器 构造函数(构造一个不包含元素的容器)empty container constructor 

std::deque<int> d;

和空 array 容器不同(array创建之后是固定的),空的 deque 容器在创建之后可以做添加或删除元素的操作,因此这种简单创建 deque 容器的方式比较常见。

2) 创建一个具有 n 个元素的 deque 容器,其中每个元素都采用对应类型的默认值:(fill constructor) Constructs a container with n elements. Each element is a copy of val (if provided).

std::deque<int> d(10);
//此行代码创建一个具有 10 个元素(默认都为 0)的 deque 容器。
std::deque<int> d(10, 5)
//如此就创建了一个包含 10 个元素(值都为 5)的 deque 容器。


3) 通过拷贝其他类型容器中指定区域内的元素(也可以是普通数组),可以创建一个新容器,例如:

//拷贝普通数组,创建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}

 

4) 在已有 deque 容器的情况下,可以通过拷贝该容器创建一个新的 deque 容器,例如:

std::deque<int> d1(5);
std::deque<int> d2(d1);

注意,采用此方式,必须保证新旧容器存储的元素类型一致。

3、deque 常用函数

常用函数也可以分为几类去记忆

1、迭代器:

begin()    Return iterator to beginning (public member function ) 返回指向容器中第一个元素的迭代器。

end()     Return iterator to end (public member function ) 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。

rbegin()     Return reverse iterator to reverse beginning (public member function ) 返回指向容器最后一个元素的迭代器

rend()    Return reverse iterator to reverse end (public member function ) 返回指向容器第一个元素前一个位置的迭代器

cbegin()    Return const_iterator to beginning (public member function ) 分别增加了const属性,不能修改

cend()    Return const_iterator to end (public member function )

crbegin()    Return const_reverse_iterator to reverse beginning (public member function )

crend()    Return const_reverse_iterator to reverse end (public member function )

2、容量:

size()      Return size (public member function )

max_size()      Return maximum size (public member function )

resize()      Change size (public member function )

empty()       Test whether container is empty (public member function )  如果为空,则返回true。

3、访问元素:

operator[]     Access element (public member function )

at()     Access element (public member function )  该函数自动检查n是否在容器中的有效元素范围内,如果不是,则抛出 out_of_range 异常(即,如果n大于或等于其 size)。这与成员 operator[],后者不检查边界。

front()     Access first element (public member function )

back()      Access last element (public member function )

4、修改容器

push_back()

push_front()

pop_back()

pop_front()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值