头文件

#include<bits/stdc++.h>
using namespace std;//万能头文件
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>//包含sort、find等算法函数
using namespace std;

一、string

输入整行带空格的字符串

int n;
cin>>n;
getchar();//用来缓冲空格,如果不加的话,无法输入后面的字符串
string s;
//getline(cin,字符串);
getline(cin,s);//整行输入,带空格

1、创建

string s1="A";//直接赋值
string s2("A");//用构造函数
string s3("abcde",3);//取前3个字符
string s4(5,'A');//五个重复的字符A
cout<<s1<<" "<<s2<<" "<<s3<<" "<<s4;//输出A A abc AAAAA

2、拼接

s1=s1+s2+s3+s4;
s1+=s2+s3+s4;//都输出AAabcAAAAA

3、访问

cout<<s1.at(3);
cout<<s1[3];//直接访问下标,访问第四个字符下标为3,都输出b

4、查找

int p=s1.find("a");//查找字符串中的a

if(p!=string::npos){//string::npos表示没找到
	cout<<p;//输出a的下标2
}
else{
	cout<<"没找到"
}
int p1=s1.find("a",2);//从下标2开始往后找,还是输出2

5、替换

//replace(起始位置,替换长度,新字符串)
s1.replace(0,1,"BB");//输出BBAabcAAAAA

6、截取

//substr(起始位置,截取长度)//如果没有截取长度的话,则表示截取到最后
string b=s1.substr(1,2);//从位置1开始截取两个字符
cout<<b;//输出Aa

7、长度

int c=b.length();
int d=b.size();
cout<<c<<d;//都输出2

8、是否为空

if(s1.empty()){
	cout<<"kong";
}
else{
	cout<<"bukong";
}//输出bukong
if(s1.size()==0){
	cout<<"kong";
}
else{
	cout<<"bukong";
}//输出bukong

9、翻转

reverse(b.begin(),b.end());
cout<<b;
//输出aA

10、清空

b.clear();//直接清空b中的元素
b.resize(0);//让b中的元素个数为0个,也表示清空b中的元素,数字是几就输出几个元素

二、map

map是关联容器,map(key,value),以键值对的形式存储数据,其中每个键都是唯一的,表示不能有重复的键,如果想要插入一个已经存在的键,那么将会覆盖该键所对应的值。

map的数据是有序的,能高效进行查找、插入与删除

map的键和值可以是任意类型

1、创建

map<int,string>m;//key是int类型(学号),value是string类型(姓名)

2、新增键值对

m[1]="zhangsan";//通过Key直接赋值
m.insert(pair<int,string>(2,"lisi"));//用inset+pair
m.emplace(3,"wangwu");//用emplace,效率高

3、访问元素

for(auto& pair:m){//auto自动推到类型为pair<int,string>
	cout<<pair.first<<" "<<pair.second<<" ";
}//输出1 zhangsan 2 lisi 3 wangwu

4、查找元素

auto f=m.find(3);//查找key=3的元素,相当于学号是3的同学的名字
if(f!=m.end()){//找到,返回对应的迭代器
	cout<<f->second;
}//输出wangwu
else{
	cout<<"meizhaodao";
}

要输出元素,查找元素时用find方法,不要直接用下标

5、修改元素

m[2]="li  si";//直接通过key修改value
cout<<m[2];//输出li  si

6、删除元素

m.erase(1)//通过key来删除value

7、大小

cout<<m.size();//删除一个后,容器的大小是2,输出2

三、vector

1、创建容器

vector <int> a;//存int类型的元素,初始值为空
vector<string>v[100];//动态二维数组,相当于容器v里有100个小的容器,同二维数组用法相似

2、添加元素

a.push_back(1);//直接从尾部添加元素
a.emplace_back(2);//和push_back类似,效率稍高(直接在容器里构造元素)

3、访问元素

cout<<a[1];//访问下标,和数组一样,下标从0开始,输出2
cout<<a.at(1);//用at(),也输出2
for(int i=0;i<a.size();i++){
	cout<<a[i]<<" ";
}//用for循环遍历全部输出,输出1 2
for(int x:a){
	cout<<x<<" ";
}//简洁的for循环遍历,输出1 2

4、修改元素

a.at(0)=3;//把第一个元素改成3
a[1]=4;//把第二个元素改成4
cout<<a[0]<<" "<<a[1];//输出3 4

5、删除元素

a.pop_back();//删除最后一个元素
cout<<a.size();//删除最后一个元素后,容器的大小,输出1
a.erase(a.begin());//删除第一个元素
a.erase(a.begin()+1);//删除第二个元素

6、是否为空

if(a.empty()){
		cout<<"kong";	
	}
	else{
		cout<<"feikong";
	}//输出feikong

7、排序

sort(a.begin(),a.end());//从小到大排序
for(int i=0;i<a.size();i++){
	cout<<a[i]<<" ";
}//输出3 4
sort(a.begin(),a.end(),greater<int>());//从大到小排序
for(int i=0;i<a.size();i++){
	cout<<a[i]<<" ";
}//输出4 3;

8、查找

auto it=find(a.begin(),a.end(),3);//查找元素3
if(it!=a.end()){
	cout<<"zhaodaole"<<it-a.begin();//输出查找元素的下标
}//输出1

9、清空

a.clear();

10 、去重(先排序)

a.erase(unique(a.begin(),a.end()),a.end());

11、反转

reverse(a.begin(),a.end());

更多推荐