算法笔记

STL(Standard Template Library)是C++的标准库,包括容器、迭代器、算法和函数对象等。容器如vector、list、set、map等提供了数据存储和管理的方式。迭代器提供了访问容器内元素的方法。算法如sort、find、transform等操作容器数据。函数对象(function object)用于实现自定义操作。适配器则用于接口转换。
摘要由CSDN通过智能技术生成

标准模板——STL

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。
STL是所有C++编译器和所有操作系统平台都支持的一种库。
该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。
为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性

STL的组成

容器(Container)

容器类是容纳、包含一组元素或元素集合的对象;
向量(vector)
双端队列(deque)
列表(list)
集合(set)、多重集合(multiset)
映射(map)和多重映射(multimap)

代码

#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
void display(vector<int> &v2);
int main(){
int i;
vector<int> v,v2(10);  //定义了一个空的vector v1,长度为0;定义了一个包含10个元素的容器v2,每个元素的值为0
cout<<"The length of this Vector is "<<v.size()<<endl;
v.push_back(1); //在容量是0的容器中插入一个数据
display(v2);	
for(i=0;i<10;i++)	    *v2[i]=i;* //对容器中的对象赋值
v2.push_back(10);     display(v2);	
return 0;
}
void display(vector<int>& v2)
{
*vector<int>::iterator  ite;*//定义了一个迭代器,用来访问容器中的对象
for(ite=v2.begin();ite!=v2.end();ite++)
	cout<<*ite<<"   ";
cout<<endl;

}

STL容器分为两类

(这两者通过数据在容器内的排列来区分)
序列式容器
每个元素都有固定位置--取决于插入时机和地点,和元素值无关,
vector、deque、list
关联式容器
元素位置取决于特定的排序准则,和插入顺序无关
set、multiset、map、multimap

STL容器元素的条件

必须能够通过拷贝构造函数进行复制
必须可以通过赋值运算符完成赋值操作
必须可以通过析构函数完成销毁动作
序列式容器元素的默认构造函数必须可用
某些动作必须定义==“operator=",例如搜寻操作
关联式容器必须定义出
排序准则==,默认情况是重载operator <

对于基本数据类型(int,long,char,double,…)而言,以上条件总是满足

STL容器的共同操作

初始化(initialization)

产生一个空容器(容量是0)
list l;

以另一个容器元素为初值完成初始化
list l;

vector c(l.begin(),l.end());

以数组元素为初值完成初始化
int array[]={2,4,6,1345};

set c(array,array+sizeof(array)/sizeof(array[0]));

与大小相关的操作(size operator)

size():返回当前容器的元素数量
empty():判断容器是否为空
max_size():-返回容器能容纳的最大元素数量
比较(comparison)
==,!=,<,<=,>,>=
如果两个容器具有相同的长度而且所有元素都相等,那么这两个容器就相等;否则,它们就不相等。
•如果两个容器的长度不相同,但较短的容器中所有元素都等于较长容器中对应的元素,则称较短的容器小于另一个容器。
•两个容器的比较结果取决于所比较的第一个不相等的元素。

赋值(assignment, =)和交换(swap)

swap用于提高赋值操作效率

与迭代器(iterator)相关的操作

begin()-返回一个迭代器,指向第一个元素
end()-返回一个迭代器,指向最后一个元素之后
rbegin()-返回一个逆向迭代器,指向逆向遍历的第一个元素
rend()-返回一个逆向迭代器,指向逆向遍历的最后一个元素之后

元素操作

insert(pos,e): 将元素e的拷贝安插于迭代器pos所指的位置
erase(beg,end): 移除[beg,end]区间内的所有元素
clear(): 移除所有元素

构造、拷贝和析构
操作 效果
vector c 产生空的vector
vector c1(c2) 产生同类型的c1,并将复制c2的所有元素
vector c(n,e) 产生一个大小为n的vector,每个元素都是e(要求T有带参的构造函数)
vector c(beg,end) 产生一个vector,以区间[beg,end]为元素初值
~vector() 销毁所有元素并释放内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值