C++ STL中容器总结

一、容器的定义
在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法。

二、容器的种类

1、顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。顺序容器包括:vector(向量)、list(列表)、deque(队列)。
2、关联容器:关联式容器是非线性的树结构,更准确的说是二叉树结构。各元素之间没有严格的物理上的顺序关系,也就是说元素在容器中并没有保存元素置入容器时的逻辑顺序。但是关联式容器提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。元素是有序的集合,默认在插入的时候按升序排列。关联容器包括:map(集合)、set(映射)、multimap(多重集合)、multiset(多重映射)。
3、容器适配器:本质上,适配器是使一种不同的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是调用另一种顺序容器去实现,即可以把适配器看作“它保存一个容器,这个容器再保存所有元素”。STL 中包含三种适配器:栈stack 、队列queue 和优先级队列priority_queue 。

容器类自动申请和释放内存,因此无需new和delete操作。

三、不同容器的使用方法

1、vector(需要导入头文件#include )
①定义与初始化

如果没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行,具体值为何,取决于存储在vector 中元素的数据类型;如果为int型数据,那么标准库将用 0 值创建元素初始化式;如果 vector 保存的是含有构造函数的类类型(如 string)的元素,标准库将用该类型的默认构造函数创建元素初始化式;元素类型可能是没有定义任何构造函数的类类型。这种情况下,标准库仍产生一个带初始值的对象,这个对象的每个成员进行了值初始化。

vector vec1; //默认初始化,vec1为空

vector vec2(vec1); //使用vec1初始化vec2

vector vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2

vector vec4(10); //10个值为0的元素

vector vec5(10,4); //10个值为4的元素

vector vec6(10,“null”); //10个值为null的元素

vector vec7(10,“hello”); //10个值为hello的元素

②常用的操作方法

vec1.push_back(100); //添加元素

int size = vec1.size(); //元素个数

bool isEmpty = vec1.empty(); //判断是否为空

cout<<vec1[0]<<endl; //取得第一个元素

vec1.insert(vec1.end(),5,3); //从vec1.back位置插入5个值为3的元素

vec1.pop_back(); //删除末尾元素

vec1.erase(vec1.begin(),vec1.end());//删除之间的元素,其他元素前移

cout<<(vec1vec2)?true:false; //判断是否相等、!=、>=、<=…

vector::iterator iter = vec1.begin(); //获取迭代器首地址

vector::const_iterator c_iter = vec1.begin(); //获取const类型迭代器

vec1.clear(); //清空元素

反向迭代器的概念点此进入

③遍历方法

//下标法(vector的特有访问方法,一般容器只能通过迭代器访问)
int length = vec1.size();
for(int i=0;i<length;i++)
{
cout<<vec1[i];
}
cout<<endl<<endl;
//迭代器法
vector::const_iterator iterator = vec1.begin();
for(;iterator != vec1.end();iterator++)
{
cout<<*iterator;

}

2、list(需要导入头文件#include )

①定义与初始化

list lst1; //创建空list

list lst2(3); //创建含有三个元素的list

list lst3(3,2); //创建含有三个元素的值为2的list

list lst4(lst2); //使用lst2初始化lst4

list lst5(lst2.begin(),lst2.end()); //同lst4

②常用的操作方法

lst1.assign(lst2.begin(),lst2.end()); //分配值

lst1.push_back(10); //添加值

lst1.pop_back(); //删除末尾值

lst1.begin(); //返回首值的迭代器

lst1.end(); //返回尾值的迭代器

lst1.clear(); //清空值

bool isEmpty1 = lst1.empty(); //判断为空

lst1.erase(lst1.begin(),lst1.end()); //删除元素

lst1.front(); //返回第一个元素的引用

lst1.back(); //返回最后一个元素的引用

lst1.insert(lst1.begin(),3,2); //从指定位置插入3个值为2的元素

lst1.rbegin(); //返回第一个元素的前向指针

lst1.remove(2); //相同的元素全部删除

lst1.reverse(); //反转

lst1.size(); //含有元素个数

lst1.sort(); //排序

lst1.unique(); //删除相邻重复元素

③遍历方法

//迭代器法

for(list::const_iterator iter = lst1.beg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值