c++常用stl容器

1 vector

1.1 说明

  • vector是向量类型,可以容纳许多类型的数据,因此也被称为容器
  • (可以理解为动态数组,是封装好了的类)
  • 进行vector操作前应添加头文件#include <vector>

1.2 基本函数实现

vector<int> v( N , i );建立一个可变长度数组v,内部元素类型为int,可变数组最初有N给元素,初始值为i,( N , i )可省略(默认为0)。

1)v.push_back( a );将元素a插入数组v末尾,并增加数组长度。

2)v.size()返回数组v的长度。

3)v.clear():来清空vector中的元素个数

4)v.resize( n,m):重新定义数组大小为n,新增部分初始为m,m可省略。若原大小大与n,则删除多余信息。

5)vector<int>: :iterator it:定义一个名字叫作it的迭代器。

6)v.begin():返回数组v的首元素末尾的下一个元素的指针(迭代器)。

7)v.end():返回数组v首元素末尾的下一个元素的指针(迭代器)。类似与空指针,无元素。

8)v.erase(v.begin()+2):将v[2]删除 v.earse(v.begin()+1,v.begin()+3); 将v[1].v[2]删除

9)多维可变数组:vector< vector<int> > v(注意尖括号里的空格,以免被认为是移位运算符而编译错误。

2 stack

2.1 说明

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。

c++ stl栈stack的头文件为:

​ #include <stack>

2.2 基本函数实现

1)stack <int> s: 建立一个栈s,其内部元素类型是int

2)s.push(a):将元素a压进栈s

3)s.pop():将s的栈顶元素弹出

4)s.top():查询s的栈顶元素

5)s.size():查询s的元素个数

6)s.empty():查询s是否为空

3 queue

3.1 说明

queue是一种容器转换器模板,可使用队列类。在 STL 中主要则是实现了一个先进先出的容器。

c++ stl队列queue的头文件为:

#include< queue>

3.2 基本函数实现

1)queue<int> q:建立一个内部元素类型为int的队列q

2)q.empty():判断队列是否为空

3)q.size():返回队列长度

4)q.push(a):对于queue,在队尾压入一个新元素a

5)q.front():返回队首元素的值,但不删除该元素

6)q.back():返回队尾元素的值,但不删除该元素

7)q.top():返回具有最高优先级的元素值,但不删除该元素

4 list

4.1 说明

List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。使用时需要添加头文件

#include <list>

4.2 基本函数实现

定义和初始化

list<int>lst1; //创建空list

list<int> lst2(5); //创建含有5个元素的list

list<int>lst3(3,2); //创建含有3个元素的list

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

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

常用操作函数

list <int> a

list<int>::iterator it; 定义一个名为it的迭代器(指针)

it++;it-- ;迭代器指向前一个和后一个元素

a.insert(it,x) ;在迭代器it的前插入元素x

a.erase(it) ;删除it指针(迭代器)的元素

for(it=a.begin();it!=a.end();i++) 遍历链表

a.pop_back() ;删除最后一个元素

a.pop_front() ;删除第一个元素

a.push_back(x) 在list的末尾添加一个元素 x

a.push_front(x) 在list的头部添加一个元素 x

a.front() ;返回第一个元素

a.begin() ;返回指向第一个元素的迭代器

a.end() ;返回末尾的迭代器

a.clear() ;删除所有元素

a.empty() ;如果list是空的则返回true

5 set

5.1 说明

set的本质是红黑树(一种比较优秀的平衡二叉树)

注意:

1、set中的元素都是排好序的

2、set集合中没有重复的元素

5.2 基本函数实现

set <int> ds;		//建立一个名字叫ds的,元素类型为int的集合
begin();            // 返回指向第一个元素的迭代器
end();              // 返回指向迭代器的最末尾处(即最后一个元素的下一个位置)
clear();            // 清除所有元素
empty();            // 如果集合为空,返回true,否则返回false
erase(x);           //删除集合中的x元素,否则什么都不干
erase(it);			//删除集合中地址it的元素
size();				//集合中元素的数目
find();				//返回一个指向被查找到元素的迭代器
insert(x);			//在集合中插入元素x,如果元素已经存在则什么都不做
lower_bound();		//返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound();		//返回大于某个值元素的迭代器
set <int> ::iterator it;//迭代器it

上文中提到的“地址”实际上是对应元素的迭代器。lower_bound返回的迭代器,可以对其++找到后继元素的迭代器,也可以–找到前继元素的迭代器。需要注意指向元素的迭代器,如果已经是begi(),则不能–,如果是end(),则不能++

6 map

6.1 说明

1.map简介

map是STL的一个关联容器,它提供一对一的hash。

  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次;
  • 第二个可能称为该关键字的值(value);

map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。

2.map的功能

自动建立key - value的对应。key 和 value可以是任意你需要的类型,包括自定义类型

6.2 基本函数实现

3.使用map

#include<map>

map<A, B> ds;

建立一个名字为ds,下标类型为A,元素类型为B的映射表,例如map<string,int>就是将一个string映射到int的映射表。

ds[A]=B:就是把数组下标为A的位置值变成B,下标为任意类型

ds[A]:访问这个数组下标为A的元素,比如可以进行cout<<ds[“!!!”]<<endl;的操作

这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.

4.map的基本操作函数:

begin();         		//返回指向map头部的迭代器
clear();        		//删除所有元素
end();					//反悔映射表中最后一个元素的下一个元素的地址。这个很少直接单独使用,而是配合其他操作,用于确定某个元素的存在
swap();					//交换两个map
find(x);				//查询元素x映射表中的地址,不存在则返回end()
empty();				//如果映射表是空的,则返回1,否则返回0
size();					//返回映射表中元素的个数
erase(A);				//删除这个“数组”中下标为A的元素。注意:访问使用ds[A]访问数组下标为A的元素时,如果这个下标对应的元素不存在,则自动创建下标为A,值为默认值(例如,所以元素类型默认值是0,string字符串是空字符串)的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值