c++上课笔记《数据结构和算法》

本文主要介绍了C++中的STL(标准模板库),包括容器如vector、stack、queue、set的使用,以及算法如遍历、查找、排序等。详细讲解了vector的定义、访问方式及常用函数,强调了迭代器在访问容器中的重要作用。同时提到了集合(set)的特性和操作,以及优先队列的概念和实现。
摘要由CSDN通过智能技术生成

c++数据结构和算法

STL(标准模板库)
STL标准模板库,是一系列软件的统称。从根本上说,STL是一些“容器”的
集合,这些容器有list vector set map等,STL也是算法和其它一些组件的集合。
前面学习的sort string都是STL的内容。
算法:对一些编程中常用的算法,STL提供了通用的函数供程序员直接调用。比如
遍历(for_each)、查找(find)、二分查找(binary_search、lower_bound、upper_bound)
去除重复(unique)、填充(fill)、前一个排列(pre_permutation)、下一个排列
(next_permutation)、排序(sort)等。
模板:我们以前编写的函数中,参数的类型都是确定的,这个特点极大限制了函数
的通用性。比如C语言中求一个数的绝对值函数,整数是abs,长整数是labs,浮点数是
Fabs。STL中使用模板技术,统一为abs函数。
向量(vector)

1.vector的定义
cpp Vector<typename> name
以上定义相当于定义了一个一维数组name[size],只是size不确定,其长度可以
根据需要而变化。其中,typename可以是任何基本类型,如int、double、char、
结构体等,也可以是STL标准容器,如vector、queue等。例如:
vector a;
vectorscore;
vectorstu;//node为已经定义的结构体。但是如果typename也是一个STL
容器,那么定义时需要在两个‘>’的符号之间加上一个空格,因为“>>”在
编译器里会被作为“移位”操作,从而导致编译错误。例如:
vector<vector > a;
2. vector的访问
问vector中的元素一般有两种方式:
第一种是通过“下标”访问。例如,对于容器vector v,可以使用v[index]
来访问它的第index个元素。其中,0<=index<=v.size()-1,v.size()表示vector中元素
的个数。
第二种方式是通过“迭代器”访问。可以将“迭代器(iterator)”理解为一种
类似指针的变量。其定义为:
vector::iterator it;
这样,it就是一个vector::iterator型的变量。例如:
vector::iterator it;
就是定义一个迭代器it,并且可以通过“it”来访问int类型的vector里的元素。
例如:
vector::iterator it=v.begin();//v.begin()为取v的首元素地址,而it指向这个地址,
相当于v[0]。v[i]和
(v.begin()+i)是等价的。
for(int i=0;i<=5;i++)
printf(“%d”,*(it+i));//输出v[i];
在常用的STL容器中,只有vector和string允许使用“v.begin()+3”这种迭代器加上整数
的用法。同时,迭代器也可以进行自加、自减操作,即it++,++it,it–,--it;
例如:

For(vector<int>::iterator it=v.begin();it!=v.end();it++)
       printf(%d”,*it);//输出v[i];

需要注意的是:v.end()并不是取v的尾元素地址,而是尾元素地址的下一个地址,作为
迭代器末尾标志不存储任何元素。但是,vector迭代器并不支持“it<v.end()”
的写法。
3.vector的常用函数
前面已经介绍了两个vector函数:begin()和end()。需要注意的是,这是一种左闭右开
的表示方法。下面介绍其它几个常用的vector函数。
1、push_back()
push_back(x)用来在vector后面添加一个元素x,时间复杂度为O(1)。
2、size()
如果是一维数组,size()用来获取vector中元素的个数;如果是二维数组,size()用来
获得vector中第二维的元素个数。同时,还可以使用resize(n)重设数组的大小。
例如:

vector<int> v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值