施磊c++基础8

STL内容学习简介

C++STL : standard template libaray

vector容器

底层数据结构:动态开辟的数组。每次以空间大的二倍扩容

增加
vec.push_back(20); 末尾添加元素20 — O(1)
vec.insert(it,20);在it迭代器指向的位置插入元素20 — O(n)

删除
vec.pop_back; 末尾删除元素 ---- O(1)
vec.erase(it) ;删除it迭代器指向的位置的元素 — O(n)

查询
operator[ ]使用vec[ i ]访问第i个位置元素 — O(1)
iterator迭代器进行遍历
find,for_each

常用方法
size()
empty()
reserve(20):给vector预留空间的
resize(20):给容器扩容用的
swap(a,b):两个容器进行元素交换
在这里插入图片描述

deque和list

deque:双端队列容器
底层数据结构:动态开辟的二维数组,一维数组从2开始,以2倍的方式进行扩容,每次扩容以后,原来第二维的数组,从新的第一维数组下标oldsize/2开始存放,上下都预留相同空行。方便支持deque的首尾元素添加

deque < int > deq;

增加:
deq.push_back(20);从末尾添加元素 — O(1)
deq.push_front(20);从首部添加元素 — O(1)
deq.insert(it,20);在it迭代器指向的位置插入元素20 — O(n)

删除:
deq.pop_back();从尾部删除元素 — O(1)
deq.push_front(20);从首部删除元素 — O(1)
deq.erase(it) ;删除it迭代器指向的位置的元素 — O(n)

list:链表容器
底层数据结构:双向的循环链表 — pre,data,next
list< int> mylist;

增加:
mylist.push_back(20);从末尾添加元素 — O(1)
mylist.push_front(20);从首部添加元素 — O(1)
mylist.insert(it,20);在it迭代器指向的位置插入元素20 — O(n)
删除:
mylist.pop_back();从尾部删除元素 — O(1)
mylist.push_front(20);从首部删除元素 — O(1)
mylist.erase(it) ;删除it迭代器指向的位置的元素 — O(1)

对于链表来说,查询的操作比较慢O(n)

vector,deque和list对比

vector特点:动态数组,内存是连续的,2倍方式进行扩容
deque特点:动态开辟的二维数组空间,第二维是固定长度的连续空间。扩容的时候,第一维数据进行二倍扩容
面经问题:deque底层内存是否是连续的?
并不是。第二维度是连续的,但每个第二维之间并不是连续的。

vector和deque之间的区别:
1.底层数据结构
2.前中后插入删除元素的时间复杂度:中间和末尾O(1),在首部插入,deque是O(1),vector是O(n).
3.对于内存的使用效率来说:vector 需要的内存空间必须是连续的
而deque不需要
4.在中间进行insert()或者erase()的效率:都是O(n)。都要进行元素移动,但是vector是完全连续的,所以比较简单一点,

vector和list之间的区别:
1.底层数据结构:数组 双向循环链表
数组:增加删除O(n),查询O(n),随机访问O(1)
链表:增加删除O(1),查询O(n),随机访问O(n)

详解容器适配器

1.适配器底层没有自己的数据结构,他是另外一个容器的封装,它的方法,全部由底层依赖的容器进行实现。
2.没有实现自己的迭代器

template<typename T,typename Container=deque<T>>
class Stack {
   
   
public:
	void push(const T& val)
	{
   
   
		con.push_back(val);
	}

	void pop() {
   
   
		con.pop_back();
	}

	T top()const 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值