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容器