STL简介

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。
STL是所有C++编译器和所有操作系统平台都支持的一种库

STL的组成

1)容器
容器类是容纳、包含一组元素或元素集合的对象;
向量
双端队列
列表
集合、多重集合
映射和多重映射

 #include <iostream>
 #include <vector>
 #include <iterator>
 using namespace std;
 void display(vector<int>&v2);
 int main(){
 int i;
 vector<int> v,v2(10);
 cout<<"The length of this Vector is"<<v.size()<<endl;
 v.push_back(1);
 display(v2);
 for(i=0;i<10;<I++)
 v2.push_back(1o);
 return 0;
 } 
void display(vector<int>&v2)
{
vector<int>::iterator ite;
for(ite=v2.begin();ire!=v2.end();ite++)
cout<<*ite<<" ";
cout<<endl;
}

2)迭代器
3)算法
4)函数对象
5)适配器
6)空间配置器
所谓函数对象(function object)是重载了函数调用操作符(funiton-call operator())的对象,函数对象的优势在于能很好的满足STL的抽象要求。
将一个class的接口转换为另一个class的接口,使得原本因接口不兼容而不能合作的classes可以一起运作。
容器适配器,迭代器适配器,函数对象适配器。

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

(1)构造、拷贝和析构

vector c产生空的vector
vector c1(c2)产生同类型的c1,并将复制c2的所有元素
vector c(n)利用类型T的默认构造函数和拷贝构造函数生成一个大小为n的vector
vector c(n,e)产生一个大小为n的vector,每个元素都是e
vectorc(beg,end)产生一个vector,以区间[beg,end]为元素初值
~vector()销毁所有元素并释放内存。

(2)非变动操作

c.size()返回元素个数
c.empty()判断容器是否为空
c.max_size()返回元素最大可能数量(固定值)
c.capacity()返回重新分配空间前可容纳的最大元素数量
c.reserve(n)扩大容量为n
c1==c2判断c1是否等于c2
c1!=c2判断c1是否不等于c2
c1<c2判断c1是否小于c2
c1>c2判断c1是否大于c2
c1<=c2判断c1是否大于等于c2
c1>=c2判断c1是否小于等于c2
#include <iostream>
#include <vector>
using namespace std;
int main() 
{ 	
vector<int> v1;
v1.assign(10,5); //将10个5放入容器中 	
for(int i=0;i<10;i++) 		
cout<<v1[i]<<"  "; 	
cout<<endl; 
}

assign原理
先将容器中的存储的数据元素(对象)删除(不删除元素所占用的存储空间);
如果容器的容量足够,则将新的对象放入容器中
如果容器的容量不足,则需要将原来的存储空间回收,重新分配存储空间,之后将新对象放入容器中

元素存取

at(idx)返回索引idx所标识的元素的引用,进行越界检查
operator 返回索引idx所标识的元素的引用,不进行越界检查
front()返回第一个元素的引用,不检查元素是否存在
back()返回最后一个元素的引用,不检查元素是否存在

迭代器相关函数

操作效果
begin()返回一个迭代器,指向第一个元素
end()返回一个迭代器,指向最后一个元素之后
rbegin()返回一个逆向迭代器,指向逆向遍历的第一个元素
rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素
#include <iostream> 
#include <vector> 
using namespace std; 
int main(){ 	
vector<int> v1(10),v2;//定义了一个包含10个对象的容器。对象的初值为0 	
int i; 	
cout<<v1.capacity()<<endl;
v1.push_back(123); 	
cout<<v1.capacity()<<endl; 	
v1.push_back(234); 	
cout<<v1.capacity()<<endl; 	
v1.reserve(20); 	
cout<<v1.capacity()<<endl; 	
for(i=0;i<v1.size();i++) 		
cout<<v1.at(i)<<"   "; 	
cout<<rendl; 	
return 0; 
}

在这里插入图片描述

vector 和 数组的区别

1.array 定义的时候必须定义数组的元素个数;而vector 不需要;
2.array 定义后的空间是固定的了,不能改变;而vector 要灵活得多,可再加或减.
3.vector有一系列的函数操作,非常方便使用。
4.数组和vector不同,一个数组不能用另一个数组初始化,也不能将一个数组赋值给另一个数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值