C++中string map和vector知识点
·
头文件
#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());
更多推荐

所有评论(0)