vector容器
vector放置数据类型
容器:vector
算法:for_each
迭代器:vector<int>iterator
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
#include <algorithm> //使用大三种方法遍历
void myPrint(int val)//使用第二种遍历 第一种遍历不需要
{
cout << val <<endl;
}
void bianli()
{
vector<int> v; //创建一个vector容器,数组
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//第一种遍历方式
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
cout<< *it << endl;
//第二种遍历方式利用STL提供算法
for_each(v.begin(),v.end(),myPrint);
}
int main()
{
bianli();
return 0;
}
容器嵌套容器
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
//容器嵌套容器
void qiantaobianli()
{
vector<vector<int>> v;
//创建小容器
vector<int>v1;
vector<int>v2;
vector<int>v3;
vector<int>v4;
vector<int>v5;
//向小容器中添加数据
for(int i =0;i<4;i++)
{
v1.push_back(i+1);
v2.push_back(i+2);
v3.push_back(i+3);
v4.push_back(i+4);
}
//将小容器插入大容器
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
v.push_back(v4);
for(vector<vector<int>>::iterator it = v.begin();it!=v.end();it++)
{
//(*it)----容器vector<int>
for(vector<int>::iterator vit = *it.begin();vit!=*it.end();vit++)
{
cout << *vit << " ";
}
cout << endl;
}
}
int main()
{
qiantaobianli();
return 0;
}
vector构造函数
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout << endl;
}
void gouzao()
{
//第一种默认构造
vector<int>v1;
for(int i = 0;i<10;i++)
{
v1.push_back(i);
}
printVector(v1);
//第二种通过区间方式构造
vector<int>v2(v1.begin(),v2.end());
printVector(v2);
//n个element构造方式
vector<int>v3(10,100);//10个100
printVector(v3);
//拷贝构造
vector<int>v4(v3);
printVector(v4);
}
int main()
{
gouzao();
return 0;
}
vector赋值操作
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout << endl;
}
void fuzhi()
{
vector<int>v1;
for(int i = 0;i<10;i++)
{
v1.push_back(i);
}
printVector(v1);
//赋值
vector<int>v2
v2 = v1;
printVector(v2);
//assign方式赋值
vector<int>v3;
v3.assgin(v1.begin(),v1.end());
printVector(v3);
//n个elem方式赋值
vector<int>v4;
v4.assgin(10,100);
printVector(v4);
}
int main()
{
fuzhi();
return 0;
}
5.vector容器的大小和容量
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout << endl;
}
void daxia rongliang()
{
vector<int>v1;
for(int i = 0;i<10;i++)
{
v1.push_back(i);
}
printVector(v1);
if(v1.empty())//为真 代表容器为空
{
cout<<"v1为空"<<endl;
}
else
{
cout<<"v1不为空"<<endl;
cout<<"v1的容量为: "<<v1.capacity() <<endl;
cout<<"v1的大小为: "<<v1.size()<<endl;
}
//重新指定大小
v1.resize(15,100); //如果参数2没有数值默认值为0
printVector(v1); //如果重新指定的比原来长了,默认用0值来填充
v1.resize(5);
printVector(v1);
}
int main()
{
daxiao rongliang();
return 0;
}
vector插入和删除
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout << endl;
}
void shanchu()
{
vector<int>v1;
//尾插
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(50);
printVector(v1);
//尾删
v1.pop_back();
printVector(v1);
//插入 第一个参数是迭代器
v1.insert(v1.begin(),100);
printVector(v1);
v1.insert(v1.begin(),2,1000);
printVector(v1);
//删除
v1.erase(v1.begin());
printVector(v1);
//v1.erase(v1.begin(),v1.end());
v1.clear();
printVector(v1);
}
int main()
{
shanchu();
return 0;
}
6.vector数据存取
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
void cunqu()
{
vector<int>v1;
for(int i = 0;i<10;i++)
{
v1.push_back(i);
}
//利用[]方式访问数组元素
for(int i = 0;i<v1.size();i++)
{
cout<<v1[i]<<" "'
}
cout << endl;
//利用at方式访问元素
for(int i = 0;i<v1.size();i++)
{
cout<<v1.at(i)<<" "'
}
cout << endl;
//获取第一个元素
cout<< "第一个元素为: "<<v1.front()<<endl;
//获取最后一个元素
cout<< "最后一个元素为: "<<v1.back()<<endl;
}
int main()
{
cunqu();
return 0;
}
vector互换容器
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout << endl;
}
void huhuan()
{
vector<int>v1;
for(int i = 0;i<10;i++)
{
v1.push_back(i);
}
printVector(v1);
cout<<"互换前: "<<endl;
for(int i = 10;i>0;i--)
{
v2.push_back(i);
}
printVector(v2);
cout<<"互换后: "<<endl;
v1.swap(v2);
printVector(v1);
printVector(v2);
}
int main()
{
charu huhuan();
return 0;
}
实际用途: swap可以收缩内存空间
#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout << endl;
}
void huhuan()
{
vector<int>v;
for(int i = 0;i<100000;i++)
{
v.push_back(i);
}
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
v.resize(3)//重新指定大小
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
//收缩内存
vector<int>(v).swap(v);//匿名一个容器复制为与v相同大大小 并与v互换容器 互换后的原来v被释放
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
}
int main()
{
charu huhuan();
return 0;
}
vector预留空间
v.reserve(100000);//已知要存储的空间直接预留
string容器
string的构造函数
string(); //创建一个空的字符串 例如 string str;
string(cost char*s);//使用字符串s初始化
string(cost string& str);//使用一个string对象初始化例外一个string对象
string(int n,char c)//使用n个字符c初始化
#include <iostream>
#include <cstring>
using namespace std;
void gouzao()
{
string s1;//默认构造
cost char *str = "hello word";
cout << "s1 = "<< s1 <<endl;
string s2(str);
cout << "s2 = "<< s2 <<endl;
string s3(s2);
cout << "s3 = "<< s3 <<endl;
string s4(10,'a')
cout << "s4 = "<< s4 <<endl;
}
int main()
{
gouzao();
return 0;
}
string赋值操作(一般使用operator足够)
#include <iostream>
#include <cstring>
using namespace std;
void fuzhi()
{
string str1;
str1 = "hello word";
cout << "str1 = "<< str1 <<endl;
string str2;
str2 = str1;
cout << "str2 = "<< str2 <<endl;
string str3;
str3 = 'a';
cout << "str3 = "<< str3 <<endl;
string str4;
str4.assign("hello c++");
cout << "str4 = "<< str4 <<endl;
string str5;
str5.assign("hello c++",5);
cout << "str5 = "<< str5 <<endl;
string str6;
str6.assign(str5);
cout << "str6 = "<< str6 <<endl;
string str7;
str7.assign(10,'w');
cout << "str7 = "<< str7 <<endl;
}
int main()
{
fuzhi();
return 0;
}
字符串拼接
#include <iostream>
#include <cstring>
using namespace std;
void pinjie()
{
//operator方式
string str1 = "我";
str1 += "爱玩游戏";
cout << "str1 = "<< str1 <<endl;
str1 += ':';
cout << "str1 = "<< str1 <<endl;
string str2 = "LOL DNF";
str1 +=str2 ;
cout << "str1 = "<< str1 <<endl;
//append方式
string str3 = "I";
str3.append("love");
cout << "str3 = "<< str3 <<endl;
str3.append("game abcde",4);//吧前四个字符拼接
cout << "str3 = "<< str3 <<endl; //I love game
str3.append(str2);
cout << "str3 = "<< str3 <<endl; //I love LOL DNF
str3.append(str2,0,3);
cout << "str3 = "<< str3 <<endl; //I love LOL只从str20位截取三个
}
int main()
{
pinjie();
return 0;
}
string字符串的查找和替换
查找(一般使用find)
#include <iostream>
#include <cstring>
using namespace std;
void chazhao()
{
//查找
string str1 = "abcdefgde"
int pos = str1.find("de")
if(pos == -1)
cout << "未找到字符串" << endl;
else
cout << "找到字符串,pos = " << pos << endl;
//rfind 和find区别
//rfind从右往左查找 find从左往右查找
pos = str1.rfind("de");
}
int main()
{
chazhao();
return 0;
}
替换
#include <iostream>
#include <cstring>
using namespace std;
void tihuan()
{
//替换
string str1 = "abcdefg";
//从一号位置起4个字符 替换为"1111"
str1.replace(1,3,"1111");
cout << "str1 = " << str1 << endl;
}
int main()
{
tihuan();
return 0;
}
字符串比较
#include <iostream>
#include <cstring>
using namespace std;
void bijiao()
string str1 = "xello";
string str2 = "hello";
if(str(1).compare(str2) == 0)
cout << "str1 = str2" << endl;
else if(str(1).compare(str2) >0)
cout << "str1 > str2" << endl;
else if(str(1).compare(str2) <0)
cout << "str1 < str2" << endl;
}
int main()
{
bijiao();
return 0;
}
字符存取
#include <iostream>
#include <cstring>
using namespace std;
void cunqu()
{
string str1 = "hello";
//1.通过[]访问单个字符
for(int i = 0;i<str.size();i++)
cout << str[i] << ' ';
cout << endl;
//2.通过at方式访问单个字符
for(int i = 0;i<str.size();i++)
cout << str.at(i) << ' ';
cout << endl;
//修改单个字符
str[0] = 'x';
cout << "str = " << str << endl;
str.at(1) = 'x';
out << "str = " << str << endl;
}
int main()
{
cunqu();
return 0;
}
字符串插入和删除
#include <iostream>
#include <cstring>
using namespace std;
void charu shanchu()
{
string str = "hello";
//插入
str.insert(1,"111");
cout << "str = " << str << endl;
//删除
str.erase(1,3);
cout << "str = " << str << endl;
}
int main()
{
charu shanchu();
return 0;
}
字串获取
#include <iostream>
#include <cstring>
using namespace std;
void qiuzichuan()
{
string email = "zhangsan@sin.com";
int pos = email.find("@");
string UserName = email.substr(0,pos);
cout << UserName << endl;
}
int main()
{
charu qiuzichuan();
return 0;
}
deque容器
deque构造
#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
for(deque<int>::iterator it=d.begin();i!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void gouzao()
{
deque<int>d1;
for(int i=0;i<10;i++)
{
d1.push_back(i);
}
printfDeque(d1);
deque<int>d2(d1.begin(),d1.end())
printfDeque(d2);
deque<int>d3(10,100);
printfDeque(d3);
deque<int>d4(d3);
printfDeque(d4);
}
int main()
{
gouzao();
return 0;
}
deque赋值操作
#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
for(deque<int>::iterator it=d.begin();i!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void fuzhi()
{
deque<int>d1;
for(int i=0;i<10;i++)
{
d1.push_back(i);
}
printfDeque(d1);
//operator赋值
deque<int>d2;
d2=d1;
printfDeque(d2);
//assign赋值
deque<int>d3;
d3.assign(d1.begin(),d1.end());
printfDeque(d3);
deque<int>d4;
d4.assign(10,100);
printfDeque(d4);
}
int main()
{
fuzhi();
return 0;
}
3.deque大小操作
#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
for(deque<int>::iterator it=d.begin();i!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void daixao()
{
deque<int>d1;
for(int i=0;i<10;i++)
{
d1.push_back(i);
}
printfDeque(d1);
if(d1.empty())
cout<<"d1为空"<<endl;
else
{
cout<<"d1不为空" <<endl;
cout<<"d1的大小为:"<<d1.size()<<endl;
//deque没用容器概念
}
//重新指定大小
d1.resize(15,1);
printfDeque(d1);
d1.resize(5);
printfDeque(d1);
}
int main()
{
daxiao();
return 0;
}
deque插入删除
两端操作
#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
for(deque<int>::iterator it=d.begin();i!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void charu shanchu()
{
deque<int>d1;
//尾插
d1.push_back(10);
d1.push_back(20);
//头插
d1.push_front(100);
d1.push_front(200);
printfDeque(d1);
//尾删
d1.pop_back();
printfDeque(d1);
//头删
d1.pop_front();
printfDeque(d1);
}
int main()
{
charu shanchu();
return 0;
}
指定位置
#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
for(deque<int>::iterator it=d.begin();i!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void charu()
{
deque<int>d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
printfDeque(d1);
//insert插入
d1.insert(d1.begin(),1000);
printfDeque(d1);
d1.insert(d1.begin(),2,10000);
printfDeque(d1);
//按照区间插入
deque<int>d2;
d2.push_back(1);
d2.push_back(2);
d2.push_back(3);
d1.insert(d1.begin(),d2.begin(),d2.end());
printfDeque(d1);
}
void shanchu()
{
//删除
deque<int>d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
deque<int>::iterator it = d1.begin();
d1.erase(it);
//按区间方式删除
d1.erase(d1.begin(),d1.end());
//或者
d1.clear();
printfDeque(d1);
}
int main()
{
charu();
shanchu();
return 0;
}
deque数据存取
#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void cunqu()
{
deque<int>d;
d.push_back(10);
d.push_back(20);
d.push_back(30);
d.push_front(100);
d.push_front(200);
d.push_front(300);
//通过[]方式访问
for(int = 0;i<d.size();i++)
{
cout<<d[i]<<' ';
}
cout<<endl;
//通过at方式访问
for(int = 0;i<d.size();i++)
{
cout<<d.at(i)<<' ';
}
cout<<endl;
cout<<"第一个元素为:"<<d.front()<<endl;
cout<<"最后一个元素为:"<<d.back()<<endl;
}
int main()
{
cunqu();
return 0;
}
deque排序
#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
#include <algorithm>
void printfDeque<deque<int>&d>
{
for(deque<int>::iterator it=d.begin();i!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void paixu()
{
deque<int>d;
d.push_back(10);
d.push_back(20);
d.push_back(30);
d.push_front(100);
d.push_front(200);
d.push_front(300);
printfDeque(d);
//排序 默认排序规则 从小到大 升序
//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
//vector容器也可以利用 sort进行排序
sort(d.begin(),d.end());
cout<<"排序后:"<<endl;
printfDeque(d);
}
int main()
{
paixu();
return 0;
}
stack容器
1.栈的概念
2.stack常用接口
#include <iostream>
#include <cstring>
using namespace std;
#include <stack>
#include <algorithm>
void zhan()
{
stack<int>s;
//入栈
s.push(10);
s.push(20);
s.push(30);
s.push(40);
cout<<"栈的大小为:"<<s.size()<<endl;
//只要栈不为空,查看栈顶,并且执行出栈操作
while(!s.empty())
{
//查看栈顶元素
cout<<"栈顶元素为:"<<s.top()<<endl;
//出栈
s.pop();
}
cout<<"栈的大小为:"<<s.size()<<endl;
}
int main()
{
zhan();
return 0;
}
queue容器
1.队列的基本概念
2.queue常用接口
#include <iostream>
#include <cstring>
using namespace std;
#include <queue>
#include <algorithm>
class person
{
public:
{
person(string name,int age)
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
}
void duilie()
{
queue<person>q;
//准备数据
person p1("唐僧",30);
person p1("孙悟空",1000);
person p1("猪八戒",900);
person p1("沙僧",800);
cout<<"队列大小为:"<<q.size()<<endl;
//入队
q.push(p1);
q.push(p2);
q.push(p3);
q.push(p4);
//判断只要队列不为空,查看对头,查看队尾,出队
while(!q.empty())
{
//查看队头
cout<<"队头元素——姓名:"<<q.front().m_Name<<"年龄:"<<q.front.m_Age<<endl;
//查看队尾
cout<<"队尾元素——姓名:"<<q.front().m_Name<<"年龄:"<<q.front.m_Age<<endl;
//出队
q.pop();
}
cout<<"队列大小为:"<<q.size()<<endl;
}
int main()
{
duilie();
return 0;
}
List容器
1.链表基本概念
2.list函数构造
#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
for(list<int>::iterator it=L.begin();i!=L.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void gouzao()
{
//创建List容器
list<int>L1;
//添加数据
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
//遍历容器
printfList(L1);
//区间方式构造
list<int>L2(L1.begin(),L1.endl);
printfList(L2);
//拷贝构造
list<int>L3(L2);
printfList(L3);
//n个elem
list<int>L4(10,1000);
printfList(L4);
}
int main()
{
gouzao();
return 0;
}
3.list赋值和交换
#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
for(list<int>::iterator it=L.begin();i!=L.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void fuzhi()
{
//创建List容器
list<int>L1;
//添加数据
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
//遍历容器
printfList(L1);
//赋值
list<int>L2;
L2=L1;
printfList(L2);
list<int>L3;
L3.assign(L2.begin(),L2.end());
printfList(L3);
list<int>L4;
L4.assign(10,100);
printfList(L4);
}
void jiaohuan()
{
list<int>L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
list<int>L2;
L2.assgin(10,100);
cout<<"交换前:"<<endl;
printfList(L1);
printfList(L2);
L1.swap(L2);
cout<<"交换后:"<<endl;
printfList(L1);
printfList(L2);
}
int main()
{
fuzhi();
jiaohuan();
return 0;
}
4.list大小操作
#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
for(list<int>::iterator it=L.begin();i!=L.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void daxiao()
{
//创建List容器
list<int>L1;
//添加数据
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
//遍历容器
printfList(L1);
//判断容器是否为空
if(L1.empty())
{
cout<<"L1为空"<<endl;
}
else
{
cout<<"L1不为空"<<endl;
cout<<"L1的元素个数:"<<L1.size()<<endl;
}
//重新指定大小
L1.resize(10,10000);
printfList(L1);
L1.resize(5);
printfList(L1);
}
int main()
{
daxiao();
return 0;
}
5.list插入删除
#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
for(list<int>::iterator it=L.begin();i!=L.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void charu shanchu()
{
//创建List容器
list<int>L;
//尾插
L.push_back(10);
L.push_back(20);
L.push_back(30);
L.push_back(40);
//头插
L.push_front(100);
L.push_front(200);
L.push_front(300);
//遍历容器 300 200 100 10 20 30
printfList(L);
//尾删
L.pop_back();
//300 200 100 10 20
printfList(L);
//头删
L.pop_front();
//200 100 10 20
printfList(L);
//insert插入
list<int>::iterator it = L.begin();
L.insert(++it,1000);
//200 1000 100 10 20
printfList(L);
//删除
it = L.begin();
L.erase(++it);
//200 100 10 20
printfList(L);
//移除
L.push_back(10000);
L.push_back(10000);
L.push_back(10000);
L.push_back(10000);
printfList(L);
L.remove(1000);
printfList(L);
//清空
list.clear();
L.push_back(10000);
}
int main()
{
charu shanchu();
return 0;
}
6.list存取
#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
for(list<int>::iterator it=L.begin();i!=L.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void cunqu()
{
//创建List容器
list<int>L;
//尾插
L.push_back(10);
L.push_back(20);
L.push_back(30);
L.push_back(40);
//L1不可以用[]或者at访问list容器的元素,
//原因是list本质是链表,不是用连续线性空间存储数据,迭代器也不支持连续访问
cout<<"第一个元素为:"<<L.front()<<endl;
cout<<"最后一个元素为:"<<L.back()<<endl;
//验证迭代器是不支持随机访问的
list<int>::iterator it = L.begin();
i++;
i--;//支持双向访问
//it = it +1;//不支持随机访问
}
int main()
{
cunqu();
return 0;
}
7.list链表的反转
#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
for(list<int>::iterator it=L.begin();i!=L.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
bool mycompare(int v1;int v2)
{
//降序 就让第一个数>第二个数
return v1>v2;
}
void pauxu fanzhuan()
{
//创建List容器
list<int>L;
//尾插
L.push_back(20);
L.push_back(10);
L.push_back(50);
L.push_back(40);
L.push_back(50);
cout<<"反转前:"<<Endl;
printfList(L);
//反转
L.reverse();
cout<<"反转后:"<<Endl;
printfList(L);
//排序
cout<<"排序前:"<<Endl;
printfList(L);
//所有不支持随机访问的迭代器,不能用标准算法
//不支持随机访问迭代器的容器,内部会提供一些对应的算法
L.sort(); //默认排序规则 从小到大 升序
cout<<"排序后:"<<Endl;
printfList(L);
L.sort(mycompare);
printfList(L);
int main()
{
paixu fanzhuan();
return 0;
}
set/multiset
set/multiset构造赋值
#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
for(set<int>::iterator it=s.begin();i!=s.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void gouzao()
{
//创建List容器
set<int>s;
//插入数据 只用insert方式
s.insert(10);
s.insert(40);
s.insert(30);
s.insert(20);
s.insert(30);
//遍历容器
//set容器特点:所用容器在插入的时候会自动排序
//set容器不允许插入重复值
printfSet(s);
//拷贝构造
set<int>s1(s);
printfSet(s1);
//赋值
set<int>s2;
s2 = s1;
printfSet(s2);
int main()
{
gouzao();
return 0;
}
2.set大小和交换
#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
for(set<int>::iterator it=s.begin();i!=s.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void daxiao jiaohuan()
{
//创建List容器
set<int>s;
//插入数据 只用insert方式
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
printfSet(s);
//判断是否为空
if(s.empty())
{
cout<<"s为空"<<endl;
}
else
{
cout<<"s不为空"<<endl;
cout<<"s的大小为:"<<s.size()<<endl;
}
//交换
set<int>s1(s);
s1.insert(100);
s1.insert(300);
s1.insert(200);
s1.insert(400);
cout<<"交换前:"<<endl;
printfSet(s);
printfSet(s1);
cout<<"交换后:"<<endl;
s1.swap(s2);
printfSet(s);
printfSet(s1);
int main()
{
daxiao jiaohuan();
return 0;
}
3.set插入删除
#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
for(set<int>::iterator it=s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void charu shanchu()
{
//创建List容器
set<int>s;
//插入数据 只用insert方式
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
printfSet(s);
//删除
s1.erase(s.begin());
printfSet(s);
//删除的重载版本
s.erase(30);
printfSet(s);
//清空
//s.erase(s.begin(),s.end());
s.clear(s);
printfSet(s);
int main()
{
charu shanchu();
return 0;
}
4.set查统计
#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
for(set<int>::iterator it=s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void charu shanchu()
{
//创建List容器
set<int>s;
//插入数据 只用insert方式
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
printfSet(s);
set<int>::iterator pos = s.find(30);
if(pos!=s.end())
{
cout<<"找到元素:"<<*pos<<endl;
}
else
{
cout<<"未找到元素"<<endl;
}
//统计
int num = s.count(30);
//对于set而言 统计结果要么是0 要么是1
cout<<"num = "<<num<<endl;
int main shanchu()
{
charu();
return 0;
}
5.set和multiset区别
map容器
1.map构造与赋值
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
}
cout<<endl;
}
void gouzao()
{
//构造maop容器
map<int,int>m;
m.insert(pari<int,int>(1,10));
m.insert(pari<int,int>(2,20));
m.insert(pari<int,int>(3,30));
m.insert(pari<int,int>(4,40));
printMap(m);
//拷贝构造
map<int,int>m2(m);
printMap(m2);
//赋值
map<int,int>m3;
m3 = m2;
printMap(m3);
}
int main()
{
gouzao();
return 0;
}
2.map容器大小交换
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
}
cout<<endl;
}
void daxiao jiaohuan()
{
//构造maop容器
map<int,int>m;
m.insert(pari<int,int>(1,10));
m.insert(pari<int,int>(2,20));
m.insert(pari<int,int>(3,30));
if(m.empty())
{
cout<<"m为空"<<endl;
}
else
{
cout<<"m不为空"<<endl;
cout<<"m的大小为:"<<m.size()<<endl;
}
printMap(m);
map<int,int>m2;
m2.insert(pari<int,int>(4,100));
m2.insert(pari<int,int>(5,200));
m2.insert(pari<int,int>(6,300));
cout<<"交换前:"<<endl;
printMap(m);
printMap(m2);
cout<<"交换后:"<<endl;
m.swap(m2);
printMap(m);
printMap(m2);
}
int main()
{
daxiao jiaohuan();
return 0;
}
3.map插入删除
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"ket = "<<(*it).first<<"value = "<<it->second<<endl;
}
cout<<endl;
}
void charu shanchu()
{
map<int,int>m;
//第一种
m.insert(pari<int,int>(1,10));
//第二种
m.insert(make_pair(2,20));
//第三种
m.insert(map<int,int>::value_type(3,30));
//第四种 不建议插入 但可以利用key访问value
//cout<<m[4]<<<endl;
m[4] = 40;
printMap(m);
//删除
m.erase(m.begin()) //按照key删除
printMap(m);
//清空
//m.erase(m.begin(),m.end());
m.clear()
printMap(m);
int main()
{
charu shanchu();
return 0;
}
4.map查找统计
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
}
cout<<endl;
}
void chazhao tongji()
{
//查找
map<int,int>m;
m.insert(pari<int,int>(1,10));
m.insert(pari<int,int>(2,20));
m.insert(pari<int,int>(3,30));
map<int,int>::iterator pos = m.find(3);
if(pos!=m.end())
{
cout<<"查到了元素key = "<<(*pos).first<<"value = "<<pos->second<<endl;
}
else
{
cout<<"未找到元素"<<endl;
}
//统计
//map不允许插入重复的key ,count要么是0要么是1
int num = m.count(3);
cout<<"num = "<<num<<endl;
int main()
{
chazhao tongji();
return 0;
}
5.map容器排序
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
class MyCompare
{
public:
bool operator()(int v1,int v2)
{
//降序
return v1>v2;
}
}
void paixu()
{
map<int,int,MyCompare>m;
m.insert(make_pair(1,10));
m.insert(make_pair(2,20));
m.insert(make_pair(5,50));
m.insert(make_pair(3,30));
m.insert(make_pair(4,40));
for(map<int,int,MyCompare>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
}
int main()
{
paixu();
return 0;
}