sort (a,a+8,great<int>),sort (a,a+8,less<int>) <>中的数组类型可以变动
由第1,2个参数指定的数组区间,采用第3个参数指定的比较方式进行排序。 如果没有指定第3个参数时,默认采用less方式排序。
下面介绍容器(container)
STL的容器包括顺序容器,关联容器,容器适配器。
顺序容器:向量(vector),链表(list) 和双端队列(deque)
关联容器: 集合(set),多重集合(multiset),映射(map),多重映射(multimap)
容器适配器:堆栈(stack)和队列(queue)
STL为了减小操作使用容器的难度,大多数容器提供了相同的成员函数。所有的容器都有以下的几个成员函数:
empty() //判断容器是否为空,若为空,返回true,否则返回false
max_size() //返回容器最大容量,即容器中能够保存的最多元素的个数
size() //返回容器中当前元素的个数
swap() //交换两个容器中的元素
此外各类容器还具有默认构造函数,拷贝构造函数,析构函数,并重载了=,<,<=,>和>=运算符函数,可以用他们直接进行两个容器之间的比较运算。
STL中的容器头文件名略(我直接用#include<bits/stdc++.h>一劳永逸)
只有vector,deque,list,set,multiset,map,multimap才支持的成员函数。
1.begin() 指向第一个元素
2.end() 指向最后一个元素
3.rbegin() 指向按反顺序的第一个元素
4.rend() 指向按反顺序的末端位置
5.erase() 删除容器中的一个或多个元素
6.clear() 删除容器中的所有元素
1.vector
vector是向量容器,具有存储管理的功能。在插入或删除数据时,vector能够自动扩展和压缩其大小,可以像数组一样使用vector,通过运算符[ ]访问其元素,但他比数组更灵活,当添加数据时,vector的大小能够自动添加,以容纳新的元素。
(1)vector的构造 (模板参数T是数组类型)
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.pop_back() //删除最后一个元素
c.erase(pos) // 删除pos位置的元素
c.erase(beg,end) //删除区间[beg,end]内所有的元素
c.clear() //删除所有元素,清空容器
c.size() //返回向量c中元素的个数
c.resize(n) //将c重新设置为大小为n个元素的向量,如果n比原来的元素多,则多出的元素被初始化为0
下面是实例(vector):
#include<bits/stdc++.h>
using namespace std;
//以int为例
void display(vector<int> &v)
{
for(auto it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
int main()
{
int a[]={1,2,3,4,5,6};
vector<int> v1,v2;//定义只有0个元素的向量v1,v2
vector<int> v3(a,a+6);//定义向量v3并用数组a初始化该向量
vector<int> v4(6);//定义具有6个元素的向量v4
for(int i=10;i<=12;i++)
{
v1.push_back(i);//向v1向量的尾部加入10,11,12
}
v1.insert(v1.begin(),30);//将30插入到v1向量的最前面
v2=v1;//将v1赋值给v2,v2与v1具有相同的元素
v3.assign(3,10);//将v3的前3个元素都设置为10
cout<<"v1: "; display(v1);
cout<<"v2: "; display(v2);
cout<<"v3: "; display(v3);
v4[0]=10; v4[1]=20; v4[2]=30; v4[3]=40; //用数组方式访问向量元素
cout<<"v4: ";
for(int i=0;i<6;i++)
{
cout<<v4[i]<<" ";
}
cout<<endl;
v4.resize(10);
cout<<"v4: "; display(v4);
return 0;
}
输出:
v1: 30 10 11 12
v2: 30 10 11 12
v3: 10 10 10
v4: 10 20 30 40 0 0
v4: 10 20 30 40 0 0 0 0 0 0