泛型编程四:容器


前言

STL有六大部件,容器、算法、仿函数、迭代器、适配器和分配器。除了算法是函数模板,其他都是类模板。容器可以分为序列容器和关联容器。常见的序列容器有vector、array、deque、list、forward-list,常见的关联容器有map、set、multimap和multiset。

一、序列容器

各个容器
65466

verctor

verctor比较常用,图解:

特点:verctor是二倍增长的,当它容量不够时候,会二倍增长后把原来的东西搬过去
用法:

vector<int> c;//定义时候需要声明是什么类型
c.puh_back(3);//要从尾巴放数进去
c.size();//可以vector里面占了多少空间
c.capacity();//可以知道最大容纳多少空间
c.front();//最前面的那个数拿出来
c.back()://最后面的那个数拿出来
c.date();//首地址

注意:赋值好像都用++i?

544

两种查找方式

auto it = :: find(c.begin(),c.end(),target);//顺序查找,前面auto可以自动推导


//法二
sort(c.begin(),c.end());//顺序排序
string* it=(string*)bsearch(&target, (c.date()),(c.size()),sizeof(string))

在这里插入图片描述

array

c本来就有,包装成容器的行为,要有迭代器才能配合算法
特点:没有构造函数和析构函数
用法:

array<long,msize> c;//要指定数组的数据类型和大小
c.size();//大小
c.front();//首元素
c.back();//尾元素
c.data();//数组首地址

qsort(c.data(),msize,sizeof(long),compareLong)//快速排序、指定地址、多少个元素、每个元素大小是多少,比较方法是怎么样的
bsearch(&target,c.date(),msize(),sizeof(long),compareLong)//二分查找,指定查找对象

list和forward_list

list是双向链表,用的是尾插法,而forward_list用的是头插法,同时计算size和back效率太低,所以不提供。

list<int> c;
c.size();
c.front();
c.back();
c.push_back();//尾插法
c.sort();//list容器里面的sort,这样设计的原因是list里面的空间是不连续的,而::sort用的是标准库的,他要求连续空间才能操作
forward_list<int> c;
c.push_front();
c.max_size();
c.front();

deque

类似list,两边都能扩充,他是分块储存的,当一个buffer用完后,会有一个新的buffer,这个buffer的地址放在map里面。

deque<int> c;
c.push_back():
c.pop_back();
c.push_front();
c.pop_front();
c.front();
c.back();

同时对于stack和queue他是没有自己的数据结构的,而是借用deque,是容器适配器,不提供迭代器,不能遍历。

stack<int> c;
c.push(2);
c.pop();
c.top();
c.size();

queue<int> c;
c.push(2);
c.pop();
c.front();
c.back();
c.size();

关联容器

关联容器是通过key来找值的,可以看成小型数据库。底层是通过红黑树来查找,同时set只有key,它的key也是key也是value。

mulitset和set

multiset<int> c;
c.insert(2);//会放在该放的位置,放进去就会排序
c.begin();
c.end();
c.size();
c.find(target);//内置find,红黑树

set和mulitset区别是set不允许有重复的值,同时sert不可以通过迭代器来修改容器里面的只

mulitmap和map

multimap<int,int> c;
c.insert(pair<int,int>(2,3));
c.begin();
c.end();
c.size();
c.find(target);//内置find,红黑树
//无c.front()
//multimap不能用下标[]来插入值

注意map不可以修改key值,但可以修改key对应的value值,同样map相比较multimap也不可以有重复的key

总结

本章节详细介绍了序列式容器和关联式容器,主要介绍的都是标准型的,对于一些非标准的比如hash_set、hashtable这些并没有涉及,注意array是C++11才加进去的,array和vector都是连续空间的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值