STL库的整理

Whiteying

2018-12-18 20:44:48

Personal

# 成双pair pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: ```cpp std::pair<int, string> a; ``` 表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。 ```cpp std::pair<string, string> a("James", "Joy"); ``` 也可以像上面一样在定义的时候直接对其初始化。 由于pair类型的使用比较繁琐,因为如果要定义多个形同的pair类型的时候,可以时候typedef简化声明: ```cpp typedef std::pair<string, string> author; author pro("May", "Lily"); author joye("James", "Joyce"); ``` Pair对象的操作 对于pair类,由于它只有两个元素,分别名为first和second,因此直接使用普通的点操作符即可访问其成员 ```cpp std::pair<string, string> a("Lily", "Poly"); std::string name; name = pair.second; ``` 生成新的pair对象 可以使用make_pair对已存在的两个数据构造一个新的pair类型: ```cpp int a = 8; std::string m = "James"; std::pair<int, string> newone; newone = make_pair(a, m); ``` pair中也可套pair,让它包含多个数据值。 ```cpp std::pair< int , std::pair < int , int > > a[10]; ``` ```cpp std::cin>>a[0].first; std::cin>>a[0].second.first; std::cin>>a[0].second.second; std::cout<<a[0].first<<std::endl; std::cout<<a[0].second.first<<std::endl; std::cout<<a[0].second.second<<std::endl; ``` 也可对pair进行sort排序。 如: ```cpp #include<iostream> #include<string> #include<algorithm> const int MAXN =1005; std::pair<int,int>a[MAXN]; bool cmp1(std::pair<int,int>b,std::pair<int,int>c) { return b.first>c.first; } bool cmp2(std::pair<int,int>b,std::pair<int,int>c) { return b.second>c.second; } int main() { int n; std::cin>>n; for(int i=1;i<=n;i++) std::cin>>a[i].first>>a[i].second; std::sort(a+1,a+1+n,cmp1);//按first进行排序 for(int i=1;i<=n;i++) std::cout<<a[i].first<<" "<<a[i].second<<std::endl; std::sort(a+1,a+1+n,cmp2);//按second进行排序 for(int i=1;i<=n;i++) std::cout<<a[i].first<<" "<<a[i].second<<std::endl; return 0; } ``` # 字符串string begin 语法:iterator begin(); 解释:begin()函数返回一个迭代器,指向字符串的第一个元素. end 语法:iterator end(); 解释:end()函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置). rbegin 语法:const reverse_iterator rbegin(); 解释:rbegin()返回一个逆向迭代器,指向字符串的最后一个字符。 rend 语法:const reverse_iterator rend(); 解释:rend()函数返回一个逆向迭代器,指向字符串的开头(第一个字符的前一个位置)。 ![](https://cdn.luogu.com.cn/upload/pic/47525.png) 用法举例: ```cpp #include<iostream> #include<string> using namespace std; int main() { string str1,str2; cin >> str1; //定义一个正向迭代器 string::iterator ptr1 = str1.begin(); //正向输出字符串 while (ptr1 != str1.end()) cout << *(ptr1++) << " "; cout << endl; cin >> str2; //定义一个逆向迭代器 string::reverse_iterator ptr2 = str2.rbegin(); //逆向输出字符串 while (ptr2 != str2.rend()) //注意逆向迭代器移动方向相反,所以从尾部仍然通过++来移动 cout << *(ptr2++) << " "; cout << endl; } ```