STL基础--容器deque

3 篇文章 0 订阅
2 篇文章 0 订阅

deque与vector类似,能够进行随机查询

  • deque与vector的差异
  1. vector只能够在尾部快速地进行插入、删除操作;而deque能够在前后两端进行快速插入、删除操作
  2. 访问元素时,deque内部结构会多一个间接过程,所以元素的访问和迭代器的移动会比vector稍慢一些
  3. 在内存块大小有限制的系统中,deque可以包含更多元素,因为他使用不止一块内存
  4. deque不支持对容量和内存重新分配时机的控制
  5. deque会释放不再使用的内存区块

 

  1. 在中部插入或移除元素较慢,因为所有元素需要移动以腾出或填补空间
  2. 迭代器属于random-access iterator

 

  • 需要选择使用deque的场景
  1. 需要在两端安插、移除元素
  2. 无须指向容器内的元素
  3. 不再使用的元素必须释放

根据deque与vector的区别我们猜测一下:vector存储元素时使用的是一段连续的内存,而deque使用的可能是多段内存,然后使其组合在一起达到模拟成一段连续的内存。下面我们做一些打印来验证一下这个猜测:

int main()
{
	deque<int> dq;
	for (int i = 0; i < 100; ++i)
	{
		dq.push_back(i);
	}
	for (size_t i = 0; i < dq.size(); ++i)
	{
		if (i % 5 == 0)
		{
			cout << endl;
		}
		cout << &dq[i] << ",  ";
	}
	system("pause");
	return 0;
}

输出:

明显这些地方都出现了内存跳动,所以猜测成立

  • 构造方法
deque<T> cdefault构造函数,产生一个空的deque,没有任何元素
deque<T> c(c1)copy构造函数
deque<T> c = c1copy构造函数
deque<T> c(move(c1))move构造函数
deque<T> c = move(c1)move构造函数
deque<T> c(n)利用元素的default构造函数生成一个大小为n的deque
deque<T> c(n, val)建立一个大小为n的deque,每个元素都是val
deque<T> c(beg, end)建立一个deque,以区间[beg, end)元素为初值
deque<T> c(initlist)建立一个deque,以初值列initlist为初值
deque<T> c = initlist建立一个deque,以初值列initlist为初值
  • 增加元素
insert(pos, val)在pos之前插入一个val拷贝,并返回新元素的位置
insert(pos, n, val)在pos之前插入n个val拷贝,并返回第一个新元素的位置
insert(pos, beg, end)在pos之前插入区间[beg, end)内所有元素的拷贝,并返回第一个新元素的位置
insert(pos, initlist)在pos之前插入初值列initlist内的所有元素拷贝,并返回第一个新元素的位置
emplace(pos, val)在pos之前插入一个val为初值的元素,并返回新元素的位置
emplace_back(val)附加一个以val为初值的元素于末尾,不返回任何东西
emplace_front(val)附加一个以val为初值的元素于起点,不返回任何东西
push_back(val)附加一个val的拷贝于末尾
push_front(val)附加一个val的拷贝于起点
resize(n)将元素个数改为n,多出来的以元素的default构造函数初始化
resize(n, val)将元素个数改为n,多出来的元素初始化为val
assign(n, val)赋值n个val,赋值给c
assign(beg, end)将区间[beg, end)的元素赋值给c
assign(initlist)将初值列initlist赋值给c
  • 删除元素
pop_front()移除第一个元素
pop_back()移除最后一个元素
erase(pos)移除位置pos上的元素,返回下一元素位置
erase(beg, end)移除区间[beg, end)内所有元素,返回下一元素位置
resize(n)将元素个数改为n,多出来的以元素的default构造函数初始化
resize(n, val)将元素个数改为n,多出来的元素初始化为val
  • 修改操作
  
  
  
  
  
  
  
  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值