C++ STL模板和标准模板库
一、函数模板




#include<iostream>
#include<string>
using namespace std;
template<class T>
T min(T a[],int n)
{
int i;
T minv=a[0];
for(i=1;i<n;i++)
{
if(minv>a[i])
minv=a[i];
}
return minv;
}
int main()
{
int a[]={1,3,0,2,7,6,4,5,2};
double b[]={1.2,-3,4,6.8};
cout<<"a数组的最小值为"<<min(a,9)<<endl;
cout<<"b数组的最小值为"<<min(b,4)<<endl;
return 0;
}

这样做,省去了不同类型间比较的麻烦,相当于新建了一个模板来装之前的各种类型
二、类模板






三、stl简介
1、vector 简单知识




四、vector








#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v1;
v1.push_back(1);
v1.push_back(2); //尾部插入
v1.insert(v1.begin() ,0);//头部插入
v1.insert(v1.end() ,4);//尾部插入
v1.insert(v1.end()-1,3);//倒数第二位置
v1[4]=10;
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
return 0; //
}

#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v1;
v1.push_back(1);
v1.push_back(2); //尾部插入
v1.insert(v1.begin() ,0);//头部插入
v1.insert(v1.end() ,4);//尾部插入
v1.insert(v1.end()-1,3);//倒数第二位置
v1[4]=10;
v1.pop_back();//删除末尾值
v1.erase(v1.begin(),v1.end());//删除全部值
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
return 0; //
}

2、vector迭代器


#include<iostream>
#include<vector>//载入库
using namespace std;
int main()
{
vector<int>v1;
for(int i=1;i<10;i++)
v1.push_back(i);
vector<int>::iterator it;//迭代器
for(it=v1.begin();it<v1.end();it++)
if(*it%2==0)
cout<<*it<<" ";
return 0; //
}

注意迭代器加星号指代的是向量的内容,不加星号指向量的坐标。


#include<iostream>
#include<vector>//载入库
using namespace std;
int main()
{
vector<int>v1(4,0);
vector<int>v2(3,1);
v1.insert(v1.begin(),5);
v1.insert(v1.end(),7);
vector<int>::iterator it=v1.begin()+4;
v1.insert(it,9);
for(it=v1.begin();it<v1.end();)
{
if(*it%2==0)
it=v1.erase(it);//删除了之后,还留在原位置
else
it++; //向后进行
}
v2.insert(v2.begin(),v1.begin(),v1.begin()+2);//v1.begn()+2是指结束标志,所以就是将v1的两个值添加到v2的头部。
for(int i=0;i<v2.size();i++)
cout<<v2[i]<<" ";
return 0; //
}

#include<iostream>
#include<vector>//载入库
using namespace std;
int main()
{
vector<int>v1(4,0);
vector<int>v2(3,1);
v1.insert(v1.begin(),5);
v1.insert(v1.end(),7);
vector<int>::iterator it=v1.begin()+4;
v1.insert(it,9);
for(it=v1.begin();it<v1.end();++it)
{
if(*it%2==0)
it=v1.erase(it);//删除了之后,还留在原位置
//else
//it++; //向后进行
}
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
v2.insert(v2.begin(),v1.begin(),v1.begin()+2);
for(int i=0;i<v2.size();i++)
cout<<v2[i]<<" ";
return 0; //
}

it++,得到这样的结果,
3、应用算法


#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int>v(5,3);
vector<int>::iterator p;
p=find(v.begin(),v.end(),3);
cout<<p;
if(p!=v.end())
cout<<*p<<endl;
p=find(v.begin(),v.end(),5);
if(p==v.end())
cout<<"not find\n";
return 0;
}


#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
vector<string>v;
v.push_back("food");
v.push_back("candy");
v.push_back("apple");
sort(v.begin(),v.end());
vector<string>::iterator it;
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
return 0;
}


#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int a[]={10,5,15,20,25};
int b[]={50,40,30,20,10};
vector<int>v(10);
vector<int>::iterator it;
sort(a,a+5);
for(int i=0;i<5;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
sort(b,b+5);
merge(a,a+5,b,b+5,v.begin());
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
return 0;
}


四、map容器
浙公网安备 33010602011771号