【刷题笔记1】

笔记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();                     //循环弹出堆栈顶部元素
 }
}

  1. 向量(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的元素总个数



  1. 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出去的是最先进来的。
    }



}
  1. 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");
	}










"Labuladong"是一个著名的算法题解博主,他的刷题笔记非常受欢迎。他的笔记具有以下几个特点: 1. 思路清晰:Labuladong的刷题笔记总是能够很清晰地阐述解题思路。他善于将复杂的问题简化为易于理解的小问题,并通过逐步引入关键概念和方法,帮助读者理解并掌握解题思路。 2. 逻辑严谨:Labuladong的刷题笔记经过深思熟虑,逻辑严谨。他会从问题的定义开始,逐步引入相关的概念和解题思路,循序渐进地解决问题。这种严谨的逻辑结构有助于读者理解和消化算法的核心思想。 3. 举例详细:Labuladong的刷题笔记通常会通过具体的例子来说明解题思路。这种举例的方式不仅能够帮助读者更好地理解解题方法,还可以帮助读者更好地应用这些方法解决其他类似的问题。 4. 知识点整合:Labuladong的刷题笔记不仅仅是一个题解,而是将相关的算法知识点整合起来,构建出一个完整的学习体系。他会引入一些底层的算法原理,将不同的解题方法进行比较和总结。这种整合的方式能够帮助读者更好地理解和掌握算法的本质。 总之,Labuladong的刷题笔记以其思路清晰、逻辑严谨、举例详细和知识点整合等特点,为广大读者提供了一种深入学习和理解算法的有效途径。通过阅读他的刷题笔记并进行实践,读者能够提高解题能力,并在面对各种算法问题时能够找到正确、高效的解决方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值