当前位置: 首页 > news >正文

C++知识点总结用于打算法

🌃大纲

🌃基础篇

using namespace std

#include <iostream>
using namespace std;
int main(void)
{int n;cin>>n;cout << "woshi" << n++ <<endl;return 0;} 
#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;} 
#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

#include<cstring>//#include<string.h>
#include<cmath>//#include<math.h>

变量声明

for循环里面可以直接定义

 #include<iostream>using namespace std;int main(void){int n;cin >> n;for(int i=0;i<10;i++)cout << n << "";cout << endlfor(int i=0;i<10;i++)cout << n+1 << "";return 0;}

bool变量

非0为true,0为false

#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定义常量

#include<iostream>
using namespace std;
int main(){const int MAX = 150;cout << MAX <<endl;//define MAX 150return 0;}

string类

  1. 定义:string_s = "hello"
  2. 拼接:s=s1+s2
  3. 输入(出):cin >>s

cout << s << endl

getline(cin,s)

4.输出:s.length( )

s1 = s.substr(n,m) 或 s1= s.substr(n)

#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;
}

因为有空格,没办法完全打印出来

#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;
}

#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;
}

#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;
}


#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

#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

#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(版本不行)

#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;}
#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);

#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(键值对)

#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();

#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();


#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集合,它们省去了排序的过程,如果刷题的时候超时了,可以使用

#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"] = 2m["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>

#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返回值部分必须使用>或者<,不能有>=或者<=

#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;
}
#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(); 转化为大写字母

#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

#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,其实所有的容器都可以使用这种方式来循环

#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;
}
#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;
}
#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());

#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

#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

http://www.dtcms.com/a/452777.html

相关文章:

  • 【算法】二分查找(一)朴素二分
  • 干货>肉夹馍词嵌入方案(embedding方案),适合资源受限、要求可解释、领域边界清晰的应用场景
  • PDML 不能和rebuild partition index同时运行
  • 网站目录管理模板做一个网站一般要多少钱
  • 对于力扣2025,10,7的每日的一点反思(非递归并查集写法)
  • Elasticsearch、OpenSearch 与 Easysearch:三代搜索引擎的演化与抉择
  • 以人为本视角下定制开发开源AI智能名片S2B2C商城小程序的营销价值与实践路径
  • AI智能体(Agent)大模型入门【5】--本地AI模型连接到PyCharm或者编译软件使用
  • INT305 Machine Learning 机器学习 Pt.3二元分类和多类分类
  • 拨付网站建设经费的请示防查水表 wordpress 评论
  • 从零开始学Flink:实时流处理实战
  • mysql全量+增量备份脚本及计划任务配置
  • 做微信商城网站哪家好权威网站建设公司
  • 湛江市微信网站建设企业药品行业做网站
  • 2024- Chrome 插件开发指南和实践
  • Apache Iceberg介绍、原理与性能优化
  • winlogon!StateMachineRun函数会用到核心数据结构winlogon中的重要全局状态机状态数组
  • 手机网站开发专业什么网站做二手货车
  • 做音乐网站代码wordpress app 读者
  • 高端品牌网站建设费用网站建设的建议和意见
  • 电子商务网站的建设 论文wordpress导入大小.h
  • 化工销售怎么做网站免费空间如何放网站
  • 网站开发与规划就业前景wordpress主题设置选择
  • 怎么做网站文章伪原创重庆专业做网站
  • 网站建设维护工作经验北京网站建站模板
  • 亚马逊企业网站建设门户网站开发流程
  • 图文网站模版高端网站服务范围
  • 天水市秦州区作风建设年网站青岛推广信息
  • 自己搭建网站下列哪个不是常用的网页制作工具
  • 论述网站开发建设的一般流程亳州网站制作公司