c++STL

一.string

1.代码演示

string str1="hello";

char str2[ ]="world";

string str3;

str3.push_back('!');

//hello world!

count << str1 << " " << str2 << str3 << endl ;

从上面的代码我们能大概知道string的用法。

2.string的常见操作 

string str = "hello";
str.length();   str.size(); //O(n)
str.insert(1,"aaa");  //在下标为1处插入一个字符或字符串 O(1)
str.insert(str.begin(),'a');  //在迭代器处插入一个字符或字符串  O(n)
str.c_str();  //返回C语言字符串,用于printf  O(n)
str.append(str2);  //把str2拼接到str后面
str.compare(str2);  //strcmp(str,str2)
str==str2;  //strcmp(str,str2)==0;
str+=str2;  //str.append(str2);
str+='a' ;  //str.push_back('a');

3.注意 

c++中,string类型可以直接通过cin输入,但不能以scanf(“ %s ”,str)的方式读入。

如果要使用scanf读入,可以通过scanf读入字符数组后,将字符数组转换成string类型。

 string a;

char ch[100];

scanf("%s,ch);

a=string(ch);

cout<<a<<endl;

二.map

map是一类关联式容器。可以理解为 以任意数据类型为下标 的超级数组。使用时需要用头文件 

#include <map>

1.初始化

map<键的数据类型,值的数据类型>变量名

 2.map添加元素的方式

变量名[键]=值

 3.代码演示

#include<iostream>
#include<map>
using namespace std;
int main()
{
 map<string,int>data;
 data["Ganten"]=7;
 cout<<data["Ganten"]<<endl;//7
 return 0;
}

4.遍历

map也可以通过迭代器的方式进行遍历。

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<string,int>data;
    data["Ganten"]=7;
    data["嘉佳"]=6;
    for(map<string,int>::iterator it=data.begin();it!=data.end();it++)
    {
        cout<<it->first<<" "<<it->second<<endl;
    }
    return 0;
}

运行结果: 

嘉佳  6                

Ganten  7

map在STL中是有序的,map的访问添加时间复杂度都是O(nlogn)。

有些题目卡时间,就要用到unordered_map,它的访问添加时间复杂度都是O(1)。

除了初始化时写成unordered_map<键类型,值类型>变量名外,其他的操作都是一样的。

三.pair

pair是c++里内置的一种结构体,里面只有两个first和second。除了定义时和普通结构体不一样以外,其他的操作是一样的。

1.定义格式:

pair<键的数据类型,值的数据类型>p;

#include<iostream>
using namespace std;
int main()
{
  pair<int,double>p;
  p.first=1;
  p.second=2;
  cout<<p.first<<endl;
  cout<<p.second<<endl;

  return 0;
}

 其实map就是一个储存pair的容器。因此map的添加也可以通过insert一个pair来添加。

map<string,int>data;

data["星期天"]=7;

data["星期六"]=6;

data.insert(pair<string,int>("星期五",5));

四.algorithm库 

1.sort快速排序

作用:使指定容器范围内的元素有序。默认从小到大排序。

sort(开始位置指针,结束位置指针);左闭右开

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int a[]={5,9,6,3,7,8};
    int n=6;
    int i;
    sort(a,a+n);
    for(i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
}
//3 5 6 7 8 9

sort排序可以通过重载小于号运算符来自定义排序规则 

stuct st{

int A_score;

int B_score;

bool operator < (const st b){甲乙

if (this->A_score!=b.A_score)  return this->Ascore < b.Ascore;

return this->B_score < b.B_score;

}

 };//如果甲乙A成绩不相等,就比较甲乙的B成绩

2.min(a,b);返回两个元素值中的较小值

   max(a,b); 返回两个元素值中的较大值

   next_permutation( a.begin(),a.end() );//生成给定范围组成的下一个按字典序的排列

   per_permutation( a.begin(),a.end() );//生成给定范围组成的下一个按字典序的排列 

希望下面这张图能对大家理解字典序有帮助 

 

vector在我上一篇博客讲过了,有兴趣的可以看一下 

c++ vector 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值