C++STL 初识(上)



一、顺序和关联容器共同支持的成员函数

  • begin() 指向第一个元素
  • end() 指向最后一个元素
  • erase() 删除容器中的一个或多个元素
  • rbegin() 指向按反顺序的第一个元素
  • rend() 指向按反顺序的末端位置
  • clear() 删除容器中的所有元素

二、vector

向量容器,类似于动态数组,比数组灵活

vector图解

1. vector的构造

	vector<T> c				//产生一个空vector,其中没有任何元素
	vector<T> c1(c2)		//产生同型c2向量的一个复本(c2所有元素被复制给c1)
	vector<T> c(n,elem)		//产生大小为n的向量c,且每个元素都是elem
	vector<T> c(beg,end)	//产生一个向量,并用区间[beg,end]作为元素的初值

2. 赋值操作

	c1=c2					//将向量c2的元素全部赋值给c1
	c.assign(n,e)			//复制n个元素e,赋值给向量c
	c.assign(beg,end)		//将区间[beg,end]内的元素赋值给c
	c1.swap(c2)				//将c1与c2向量互换	

3. 直接访问向量元素

	c.at[n]					//返回下标n所标识的元素,若下标越界,返回“out_of_range”
	c[n]					//返回下标n所标识的元素,不进行范围检查
	c.front()				//返回第一个元素
	c.back()				//返回最后一个元素

4. vector向量的常用操作

c.insert(pos,e)				//在pos位置插入e的副本,并返回新元素的位置
c.insert(pos,n,e)			//在pos位置插入e的n个副本,不返回值
c.insert(pos,beg,end)		//在pos位置插入区间[beg,end]内的所有元素
c.push_back(e)				//在尾部插入元素e
c.push_back()				//删除最后一个元素
c.erase(pos)				//删除pos位置的元素
c.erase(beg,end)			//删除区间[beg,end]内的所有元素
c.clear()					//删除所有元素,清空容器
c.size()					//返回向量c中的元素个数
c.resize(n)					//将c重新设置为大小为n个元素的向量,如果n比原来的元素多,则多出的元素常被初始化为0

上述成员函数参数中涉及的位置pos都与vector的迭代器有关,要操作这些成员函数,必须定义对应向量的迭代器,并通过迭代器访问pos指向的向量元素

二、list

双向链表,可以从头到尾或从尾到头访问链表中的节点,节点可以是任意数据类型。链表中节点的访问常常通过迭代器进行。

在这里插入图片描述

1. 链表的构造(模板参数T是链表的数据类型)

	list<T> c 				//建立一个空链表c
	list<T> c1(c2) 			//建立与c2同型的链表c1(c2的每个元素都被复制)
	list<T> c(n) 			//建立具有n个元素的链表c,元素值由默认构造函数产生
	list<T> c(n,e)			//建立n个元素的链表c,每个元素的值都是e
	list<T> c(beg, end) 	//建立链表c,并用[beg, end]区间内的元素作初始化
	c.~list<e>() 			//销毁链表c,释放内存

2. 链表赋值

	c1=c2					//将c2链表的全部元素赋值给c1链表
	c1.assign(n,e)			//将元素e拷贝n次到c1链表
	c.assign(beg,end) 		//将区间[beg,end]的元素赋值给c
	c1.swap(c2)				//将链表c1和c2的全部元素互换

3. 链表存取

	c.front()				//返回第一个元素,不检查元素存在与否
	c.back()				//返回最后一个元素,不检查元素存在与否

4. 链表插入和删除

	c.insert(pos,e)			//在pos位置插入元素e的副本,并返回新元素的位置
	c.insert(pos,n,e)		//在pos位置插入元素e的n个副本,没有返回值
	c.insert(pos, beg, end) //在pos位置插入区间[ bed, end]内的全部元素
	c.push_back(e)			//在尾部追加一个元素e的副本
	c.pop_back(e)			//删除最后一个元素
	c.push_front(e)			//在表头插入元素e的一个副本
	c.pop_front()			//删除第一个元素
	c.remove(val)			//删除值为val的元素
	c.remove_if(op)			//删除所有“造成op(e)结果为true”的元素
	c.erase(pos)			//删除pos指向的元素,返回下一元素的位置
	c.erase(beg, end)		//删除区间[beg,end]内的元素,返回下一元素位置
	c.resize(n)				//将链表c的大小重新设置为n 
	c.clear()				//删除链表所有元素,将整个容器置空

5. 链表的特殊操作

	c.unique()		         	//删除相邻重复元素,只留一个
	c.unique(op)				//若存在若干相邻且使op()操作为true的元素,删除重复,只留一个
	c1.splice(pos, c2)			//将c2内的所有元素转换到c1内,pos之前
	c1.splice(pos, c2, c2pos) 	//将c2链表的c2pos所指元素移到c1内的pos指向的位置
	c1.splice(pos, c2, c2beg, c2end) 	//将c2内[c2beg, c2end]区间的所有元素转换到c1内pos之前
	c.sort()					//以operator<为准则,对所有元素排序
	c.sort(op)					//以op()为准则,对所有元素排序
	c1.merge(c2)				//c2合并到c1,若合并前有序则合后仍有序
	c.reverse()					//将所有元素反序

三、stack

堆栈是一种较简单的容器,是一种受限制的向量,只允许在一端存取变量
LIFO(Last in first out)

主要操作

	push()				//将第一个元素加入stack内,加入的元素放在栈顶
	top()				//返回栈顶元素元素值
	pop()				//删除栈顶元素
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jpgxep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值