笔记1
string s;
while(cin>>s);
cout<<s.length()<<endl;
输入为hello nowcoder时,输出为8 (nowcoder的长度)
2.字符串的输入(有空格)
string a;
getline(cin, a);
cout<<a<<endl;
输入为ABCabc a
输出为ABCabc a
否则,就用一般性的cin>>a;cout<<a;
3.字符与字符串的熟悉巩固
string a1;
a1={'a','b','c'}; //等效于string a1={"abc"};
char a2=a1[1];//索引的形式
cout<<a1<<endl;//输出结果为abc
char b=66;
cout<<b<<endl;//输出结果为B
cout<<b-0<<endl;//输出结果为66
char b=‘66’;
cout<<b<<endl;//输出结果为66
char b[]="student" //这个叫字数组
补充:string类的使用方法
string s;
string s2(s1);//由s1复制构造s2
s.size();s.length();s.empty();
s2=s2+s1;//s1追加到s2后面
s2.append(s1);
s.substr(idx,len);截取字符串,idx下标,长度为len
s.erase(idx,len)//删除从idx开始的最多len个字符
s.find("123");//查找是否存在123,存在的话,返回坐标,不存在的话,返回-1.
4.排序函数sort(first,last)
好像都是索引到下一个位置(即:超出数组、字符串的范围)
注意:map会对内容自动排序。 unordered_map就是胡乱排序的。
//#include <algorithm>(要添加头文件)
int a[10] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0};
sort(a, a + 10); // 10为元素个数
//字符串排序
string a1;
cin>>a1;
sort(a1.begin(),a1.end()); //string是比较标准的
cout<<a1;
//向量排序跟字符串一样
vector<string>a2;
while(cin>>a1)
a2.push_back(a1);//写入数据
sort(a2.begin(),a2.end());
没有第三个参数,默认升序。
如果降序排序:
//#include <algorithm>(要添加头文件)
sort(a, a + 10, greater<int>()); // 10为元素个数
补充:稳定排序算法(stable_sort),保证相同字母在排序后的先后次序不变(不区分大小写)
vector<char>b1;
stable_sort( b1.begin(), b1.end() , comp);
bool comp(char a,char b)
{
if (a >= 'A' && a <= 'Z')
{
a += 32;
}
if (b >= 'A' && b <= 'Z')
{
b += 32;
}
return a < b;//这是按照市
}
5.合并键值对(map的使用)
unordered_map随意排序
map是标准排序的,一般用map就ok。
//#include <map>(要添加头文件)
map <int,int> m; //定义
cin>>n;
for (int i=0;i<n;i++)
{
cin>>x>>y; //赋值
m[x]+=y; //合并
}
m.insert({123,234});
for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;//二维的迭代器访问方式为first、second。一维的好像直接*it就行?
}
m.count(123);//有这个元素就返回1,没有这个元素就返回0.
auto it=m.find(123);//返回的是迭代器所在的位置。没有的话就返回-1。
cout<<it->first<<end;l
cout<<it->second<<end;l
6.stack(堆栈)的使用
定义: stack<数据类型> 容器名
常用函数:
empty() //判断堆栈是否为空
pop() //弹出堆栈顶部的元素
push() //向堆栈顶部添加元素
size() //返回堆栈中元素的个数
top() //返回堆栈顶部的元素
#include<stack> //头文件
int main() {
string a;
stack<string>s; //定义堆栈的形式
while(cin>>a) //控制输入
{ s.push(a); } //压栈
while(!s.empty()) //判断非空
{ cout<<s.top()<<" "; //顶部元素
s.pop(); //循环弹出堆栈顶部元素
}
}
- 向量(vector)的使用
定义: vector<数据类型> 容器名
vector<string>a1(n);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a1[i]; //给容器赋值
}
sort(a1.begin(),a1.end()); //排序。begin/end 都是容器的常规操作
for(int i=0;i<n;i++)
cout<<a1[i]<<endl;
二维向量(vector)的使用
vector<vector<int> > v1;//正缺的定义方式(注意空格)
vector<vector<int> > v2(10, vector<int>(5,0));//正缺的定义方式(注意空格)
vector<int> B;
B.push_back(0);
B.push_back(1);
v1.push_back(B);
B.clear();
B.push_back(3);
B.push_back(4);
v1.push_back(B);
//插入{1,2}{3,4}的方法
len = v1.size();//v1中元素总个数
len = v1[i].size();//v1中第i个vector的元素总个数
- pair和queue;
#include <any>
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<pair<int,string>>q1;
q1.push({123,"神通"});//有点像定义一个坐标的形式。
q1.push({234,"234"});
q1.push({345,"345"});
q1.push({456,"456"});
while (!q1.empty()) {
//front是前面进来的,back是后面进来的。pop的时候是pop的front。
cout<<q1.front().first<<" "<<q1.front().second<<endl;
//cout<<q1.back().first<<" "<<q1.back().second<<endl;
q1.pop();//pop出去的是最先进来的。
}
}
- find()函数
#include<algorithm>//头文件
vector<int>v;
if(find(v.begin(),v.end(),4)!=v.end()){
cout<<find(v.begin(),v.end(),4)-v.begin()); //获取元素的下标
}else
{
printf("该元素不存在\n");
}