🌃大纲

🌃基础篇
using namespace std
cpp
#include <iostream>
using namespace std;
int main(void)
{
int n;
cin>>n;
cout << "woshi" << n++ <<endl;
return 0;
}
cpp
#include <iostream>//input output stream输入输出流
using namespace std;//cin cout在std这个东西里面
int main(void)
{
int n;
cin>>n;//== scanf("%d",&n)
cout << "woshi" << n++ <<endl;//enl是换行符,'\n'
return 0;
}
cpp
#include <iostream>
// using namespace std;
int main(void)
{
int n;
std::cin>>n;
std::cout << "woshi" << n++ << std::endl;
return 0;
}
cin cout 头文件
cin cout 的运算速度不如scanf 和 printf
头文件:去掉.h 直接在开头加c
cpp
#include<cstring>//#include<string.h>
#include<cmath>//#include<math.h>
变量声明
for循环里面可以直接定义
cpp
#include<iostream>
using namespace std;
int main(void)
{
int n;
cin >> n;
for(int i=0;i<10;i++)
cout << n << "";
cout << endl
for(int i=0;i<10;i++)
cout << n+1 << "";
return 0;
}
bool变量
非0为true,0为false
cpp
#include<iostream>
using namespace std;
int main(void){
bool flag = true;
bool flag2 = -1;
bool flag3 = 0;
cout << flag << " " << flag2 << " " << flag3 << endl;
return 0;
}
const定义常量
cpp
#include<iostream>
using namespace std;
int main(){
const int MAX = 150;
cout << MAX <<endl;//define MAX 150
return 0;
}
string类
- 定义:string_s = "hello"
- 拼接:s=s1+s2
- 输入(出):cin >>s
cout << s << endl
getline(cin,s)
4.输出:s.length( )
s1 = s.substr(n,m) 或 s1= s.substr(n)
cpp
#include<iostream>
using namespace std;
int main(void){
string s = "hello";
string s2 = "world!";
string s3 = s + s2;
cin >> s;
cout << s <<endl;
return 0;
}
因为有空格,没办法完全打印出来

cpp
#include<iostream>
using namespace std;
int main(void){
string s = "hello";
string s2 = "world!";
string s3 = s + s2;
getline(cin,s);
cout << s <<endl;
return 0;
}

cpp
#include<iostream>
using namespace std;
int main(void){
string s = "hello";
string s2 = "world!";
string s3 = s + s2;
getline(cin,s);
cout << s <<endl;
cout << s.length() << endl;
return 0;
}
cpp
#include<iostream>
using namespace std;
int main(){
string s = "hello world!";
cout << s << endl;
string s_sub = s.substr(6);
cout << s_sub << endl;
return 0;
}
cpp
#include<iostream>
using namespace std;
int main(){
string s = "hello world!";
cout << s << endl;
string s_sub = s.substr(6,4);
cout << s_sub << endl;
return 0;
}
结构体
可以省去struct
cpp
#include <iostream>
using namespace std;
struct stu {
string name;
int age;
};
int main(void){
stu a[10];//struct stu a[10]
return 0;
}
引用&
int &a
cpp
#include<iostream>
using namespace std;
void c(int &a){
a += 1;
}
int main(void){
int a = 4;
c(a);
cout << a << endl;
return 0;
}
vector
1.头文件:#include<vector>
2.创建数组:vector<int> v(10,2)//分配10个空间,每个空间默认值为2
vector<int> v(10)//==v(10,0)
vector<int> v
元素值默认为0
3.分配数组大小:v.resize(length)
4.末尾添加新的数据:v.push_back(data)
5.迭代器:for(auto p=c.begin(); p!=c.end(); p++){
cout << *p << "";
}//for循环,不管是否有添加,都自动打印出来,不用修改循环条件
注意切换到c++11(版本不行)
cpp
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector <int> v;//创建数组
v.resize(10);//分配数组(长度为10)
for(int i=0;i<10;i++)
v[i] = i;
v.push_back(11);//末尾添加新的数据
for(int i=0;i<11;i++)
cout << v[i] << " ";
return 0;
}
cpp
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector <int> v;
v.resize(10);
v.push_back(11);
for(auto p = v.begin(); p!=v.end();p++)
cout << *p << " ";
return 0;
}
set
1.set是集合,它里面的元素各不相同,而且元素会从小到大排序
2.头文件:#include<set>
3.创建集合:set<int> s; s的后面不可以加内容
4.插入:s.insert(data);
遍历:迭代器
查找:s.find(data) s.find()返回值是一个指针
删除:s.erase(data);
cpp
#include<iostream>
#include<set>
using namespace std;
int main(void){
set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
cout << (s.find(2) != s.end()) << endl;
cout << (s.find(4) != s.end()) << endl;
s.erase(1);
cout << (s.find(1) != s.end() )<< endl;
return 0;
}

map(键值对)


cpp
#include<iostream>
#include<map>
using namespace std;
int main(void){
map <string,int> m;
m["hello"] = 2;
m["world"] = 3;
cout << "hello:" << m["hello"] << endl;
for(auto p=m.begin(); p!=m.end(); p++)
cout << p->first << ":" << p->second << endl;
return 0;
}
stack(栈)
头文件:#include<stack>
创建栈:stack < int> s;
压栈:s.push(i);
出栈:m.pop();
访问栈顶:s.top();
获取长度:m.size();
cpp
#include<iostream>
#include<stack>
using namespace std;
int main(void){
stack <int> s;
s.push(1);
s.push(2);
s.push(3);
s.pop();
s.push(76);
cout << s.top() <<endl;
cout << "栈的长度为:" << s.size() << endl;
return 0;
}
queue(队列)
头文件:#include<queue>
创建队列:queue <int> s;
入队:s.push(i);
出队:s.pop();
访问:访问队首:s.front();
访问队尾:s.back();
获取长度:s.size();
cpp
#include<iostream>
#include<queue>
using namespace std;
int main(void){
queue <int> s;
for(int i=1;i<=10;i++)
s.push(i);
cout << "队首为:" << s.front() << endl << "队尾为:" << s.back() << endl;
s.pop();
cout << "队首为:" << s.front() << endl << "队尾为:" << s.back() << endl;
s.push(11);
cout << "队首为:" << s.front() << endl << "队尾为:" << s.back() << endl;
cout << s.size() << endl;
return 0;
}
unordered_map 和 unordered_set
这2个其实就是不会排序的map(键值对)和set集合,它们省去了排序的过程,如果刷题的时候超时了,可以使用
cpp
#include<iostream>
#include<unordered_map>
#include<unordered_set>
using namespace std;
int main(void){
unordered_map <string,int> m;
unordered_set <int> s;
s.insert(1);
s.insert(7);
s.insert(5);
m["hello"] = 1;
m["world"] = 2
m["ha"] =3;
m["hlkwe"] = 4;
m["hdskj"] = 5;
for(auto p=s.begin();p!=s.end();p++)
cout << *p <<endl;
for(auto p=m.begin();p!=m.end();p++)
cout << p->first << "" << p->second << endl;
return 0;
}
🌃进阶版
bitset 位运算
主要功能是对一个数组(int arr[] 或者(vector)进行排序,vector是容器,需要用v.begin()表示头,v.end()表示尾;而int arr[]使用arr表示数组的首地址,arr+n表示尾部

sort函数
主要功能是对一个数组(int arr[]或者vector)进行排序,vector是容器,需要用v.begin()表示头,v.end表示尾;而int arr[]使用arr表示数组的首地址,arr+n表示尾部
头文件:#include<algorithm>
cpp
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void){
vector <int> m(10);
for(int i=9;i>0;i--)
m[i] = 10-i;
m.push_back(-1);
for(int i=0;i<10;i++)
cout << m[i] << " ";
cout << endl;
sort(m.begin(),m.end());//[ )
for(int i=0;i<11;i++)
cout << m[i] << " ";
}
使用sort 自定义 cmp函数
sort默认是从小到大排序
cmp允许我们定义一些比较复杂的规则
原理:bool cmp(int x,int y)
如果返回值为真,那么x放在y前面(返回值为假时,交换2个数)
否则x放在y后面
注意:cmp返回值部分必须使用>或者<,不能有>=或者<=
cpp
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp (int x,int y){
return x>y;
}
int main(void){
vector<int> v;
for(int i=1;i<=10;i++)
v.push_back(i);
sort(v.begin(), v.end(), cmp);
for(auto p=v.begin());p !=v.end();p++)
cout << *p << " ";
cout << endl;
return 0;
}
cpp
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct stu{
string name;
int age;
};
bool cmp(stu a,stu b){
if(a.age != b.age)//年龄不同的时候,小到大
return a.age < b.age;
else //年龄相同的时候
return a.name < b.name;
}
int main(void){
stu s[3];
for(int i=0;i<3;i++)
cin >> s[i].name >> s[i].age;
sort(s,s+3,cmp);
for(int i=0;i<3;i++)
cout<< s[i].name << " " << s[i].age << endl;
return 0;
}
cctype头文件
isalpha(); 字母?
islower(); 小写字母?
isupper(); 大写字母?
isalnum(); 字母or数字?
isspace(); space \t \r \n?
tolower(); 转化为小写字母
toupper(); 转化为大写字母
cpp
#include<iostream>
#include<cctype>
using namespace std;
int main(void){
char c = '1';
cout << "isalpha:" << isalpha(c) << endl;
cout << "islower:" << islower(c) << endl;
cout << "isupper:" << isupper(c) << endl;
cout << "isalnum:" << isalnum(c) << endl;
cout << "isspace:" << isspace(c) << endl;
char s = tolower(c);
cout << s << endl;
char s1 = toupper(c);
cout << s1 << endl;
return 0;
}
🌃c++篇
auto声明
作用:可以让编译器根据初始值直接推断变量的类型 auto x = 100;
auto y = 1.5;
推广:迭代器 替换set<int> :: iterator
cpp
#include<iostream>
#include<vector>
using namespace std;
int main(void){
auto x = 19;
auto y = 1.8;
cout << x << " " << y << endl;
vector<int> a(10,1)
for(auto p =a.begin();p!=a.end();p++)
cout << *p << " ";
return 0;
}
基于范围的for循环
传值:for(int i:arr)
cout << i << endl; 输出数组中的每一个元素的值。这里不能改变元素的数值
传址:for(int &i:arr)
i=i*2 将数组中的每一个元素都乘于2,只有在引用的时候才能改变元素的值
推广:for(auto i:v)
cout << i << " "; 这里的v是一个vector,其实所有的容器都可以使用这种方式来循环
cpp
#include<iostream>
#include<vector>
using namespace std;
int main(void){
int a[5] = {1};
for(int i:a){
i++;
cout << i << " ";
}
cout << endl;
return 0;
}
cpp
#include<iostream>
#include<vector>
int main(void){
int a[5] = {1};
for(int i:a){
i++;
}
for(int i:a)
cout << i << " ";
cout << endl;
return 0;
}
cpp
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector <int> b{10,1};
for(auto i:b)
cout << i << " ";
cout << endl;
return 0;
}

to_string
作用:将数字转化为字符变量
头文件:#include<string>;
使用方法: string s = to_string(123.1);
printf("%s\n",s.c_str());
cpp
#include<iostream>
#include<string>
using namespace std;
int main(void){
string s = to_string(123.1);
cout << s << endl;
printf("%s\n",s.c_str());
return 0;
}

stoi stod
作用:将字符串转化为其他变量
处理: stoi :转化为int型 || int a= stoi("123");
stod: 转化为double型 || double b = stod("123.56");
补充: stof stold stol stoll stoul stoull
cpp
#include<iostream>
#include<string>
using namespace std;
int main(void){
int a = stoi("123");
cout << a-1 << endl;
double b = stod("12.34");
cout << b-1;
return 0;
}
Dev c++设置c++11
