#include < bits/stdc++.h > 万能头文件
#include < iostream > cin cout的头文件 基本输入流
#include < cstdio > scanf printf的头文件 定义输入/输出函数
#include < cmath > 调用数学函数
#include < cstring > #include < string > 调用字符数组和字符串函数
#include < algorithm> 调用标准算法库
#include < vector> 调用vector容器
#include < stack> 调用stack容器
定义在所有函数之外,初始值为0
定义在函数内的变量,初始值为随机数#可以重名
类型 | 类型 | 存储范围 |
---|---|---|
整数类型 | int long long |
~ ~ |
浮点数类型 | float double |
小数点后6~7位 小数点后15~16位 |
字符类型 | char | 一个字符 |
逻辑值 | bool | true或者false |
0转化为false 1或非0转化为true
char→int→long long→double
1.0*int=double
强制数据类型转换:(数据类型)(变量)
#只用于基本数据类型 int、long long、float、double、char
输入类型 | 符号 | 输出类型 | 符号 |
---|---|---|---|
int | %d | int | %d |
long long | %lld | long long | %lld |
float | %f | float | %f |
double | %lf | double | %f |
char | %c | char | %c |
char[ ] | %s | char[ ] | %s |
#char[ ]输入不用地址符
格式控制符 | 类型 | 功能 |
---|---|---|
%xd | int | 右对齐x位输出,高位空格补齐 |
%0xd | int | 右对齐x位输出,高位0补齐 |
%.xf | 浮点数 | 保留x位小数 |
字符 | ASCII码 |
---|---|
0 | 48 |
9 | 57 |
A | 65 |
Z | 90 |
a | 97 |
z | 122 |
空格 | 32 |
ASCII本质上是整数
‘A’<=变量&&变量<=‘Z’ 大写→小写:变量 + =32
‘a’<=变量&&变量<=‘z’ 小写→大写:变量 - =32
‘1’<=变量&&变量<=‘9’ 数字字符→整数:变量 - =48
求字节数:sizeof(数据类型)
Bit:位,也叫比特位,是计算机表示数据最小的单位
b(bit)比特、B(Byte)字节、Word字、KB千字节、MB兆字节
8b=1B 1024B=1KB 1024KB=1MB 1024MB=1GB
char、bool=1B int、float=4B long long、double、string=8B
1B存1个英文字母,2B存一个汉字。
进制 | ||
---|---|---|
二进制 B | 满二进一 | 0 , 1 |
八进制 O、Q | 满八进一 | 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 |
十进制D | 满十进一 | 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 |
十六进制H | 满十六进一 | 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A , B , C , D , E , F |
除二取余,逆序排位
数值乘以2的幂次依次相加
位与 & :全1才1,否则为0
位或| :全0才0,否则为1
位非(取反 ) ~ :1变0,0变1
位异或 ^ :相同为0,相异为1
左移 << :右移一位,高位补0,低位丢弃 #n << m ==
右移 >> :左移一位,低位补0,高位丢弃 #n >> m ==
加法运算符 +
减法运算符 -
乘法运算符 *
除法运算符 / #有一个浮点数则保留小数部分,否则舍去
模(取余)运算符 % #两个数必须是整数
关系 | 符号 |
---|---|
大于 | ` |
小于 | < |
大于等于 | >= |
小于等于 | <= |
等于 | == |
不等于 | != |
中间没有空格
逻辑与 (&&
):全真为真,否则为假
逻辑或 (||
):全假为假,否则为真
逻辑非 (!
):真变假,假变真
(表达式1) ? (表达式2) : (表达式3)
+= | -= | *= | /= | %= |
!
&& , ||
? :
if(表达式){
语句组
}
if(表达式){
语句组1
}else{
语句组2
}
(表达式1)?(表达式2) :(表达式3)
if( 表达式1){
语句组1
}else if(表达式2){
语句组2
}else{
语句组3
}
switch(表达式){
case 常量表达式1:
代码段1
break;
case 常量表达式2:
代码段2
break;
default:
代码段3
break;
}
#知道循环次数
for(初始值;循环条件;条件改变){
循环体
}
while(循环条件){
循环体
}
#至少循环一次
do{
循环体
}while(循环条件);
#搭配break使用
for( ; ; )
while( 1 )
continue 结束本轮循环
break 结束本层循环
三要素:功能,参数,返回值
返回类型:int、long long、float、double、char、void
#无返回值
参数传递:单项值传递、引用传递(改变实参) #(数据类型& 变量)
返回类型 函数名( 形式参数表) {
函数体
return 0; #void 时 return ; 或省略
{
符号 | 功能 | 类型 |
---|---|---|
max | 求最大值 | |
min | 求最小值 | |
pow | double | |
abs | 求绝对值 | int |
fabs | 求绝对值 | float / double |
sqrt | double | |
round | 四舍五入取整 | double |
ceil | 向上取整 | double |
floor | 向下取整 | double |
用来存储一类同类型数据
数组下标从 0 开始,for循环全部遍历不取等
const将变量转化成常量
数据范围 变量 [ 大小 ] ;
由同类型一维数组数据组成
先行后列 [ 行 ][ 列 ]
行和列的下标都是从 0 开始
遍历从0开始不取等,从1开始取等号
有结束符' /0 '
两个字符数组左对齐,从左到右比较ASCII码
可以存储空格
fgets ( 变量,存储数量,读取地(stdin) )
#存储数量=字符数组大小 - 2
格式 | 功能 |
---|---|
strcat(a,b) | 将b接到a后面,返回a的值 |
strncat(a,b,长度n) | 将b前n个字符接到a后面,返回a的值 |
strcpy(a,b) | 用b内容覆盖a内容,返回新a的值 |
strncpy(a,b,长度n) | 将b前n个字符覆盖到a,返回新a的值 |
strcmp(a,b) | 比较a和b的大小,比较结果: 如果a > b,返回一个正整数 如果a = b,返回0 如果a < b,返回一个负整数 |
strncmp(a,b,n) | 比较a和b的前n个字符,比较结构: 如果a > b,返回一个正整数 如果a = b,返回0 如果a < b,返回一个负整数 |
strlen() | 计算字符数组的长度,结束符’/0 ‘不算在长度之内 |
是由一组同从属的数据组成
在一个结构中声明不同的数据类型
相同结构的结构体变量是可以相互赋值
#结构体类型名不能和结构体变量名重名
struct 结构体类型名{
成员表;
};
struct xxx{
xxx;
xxx;
xxx;
}a[110];
struct xxx{
xxx;
xxx;
xxx;
};
xxx a[110];
struct xxx{
aaa;
bbb;
ccc;
}a[110];
int main(){
for(int i=1;i<=m;i++){
cin>>a[i].aaa>>a[i].bbb>>a[i].ccc;
}
return 0;
}
C++标准模板库
用来存储字符串的一种类型
比字符数组高级,便捷
有结束符' /0 '
getline用来输入含空格的字符 getline ( cin , 变量 )
string s;
string s="abcdefg";
int len=s.size();
for(int i=1;i<=len;i++){
cout<<s[i];
}
格式 | 功能 |
---|---|
s2=s1 | 将s1的内容赋给s2 |
s1+s2 | 把s1和s2连接成新的字符串,返回新字符串 |
s1+=s2 | 把s2接到s1后面 |
s1==s2 | s1与s2比较,相等返回true,不等返回false |
!= , > , < , >= ,<= | 按照字典序比较 |
s.size( )/s.length( ) | 返回s中的字符个数 |
s.empty( ) | 如果s为空串,则返回true,否则返回false |
s.insert( pos,s2 ) | 在s下标为pos的元素前插入s2 |
s.substr( pos,len ) | 返回一个string,包含s中下标为pos起的len个字符 |
s.erase( pos,len ) | 删除s中下标为pos开始的len个字符 |
s.replace ( pos,len,s2 ) |
将s中下标为pos的len个字符用s2替换 |
s.find( s2,pos ) | 在s中下标为pos的位置起查找s2第一次出现的下标,若查找不到返回string::npos |
s.clear( ) | 清空s中的内容 |
可以储存同类型数据的动态数组
vector和数组的区别:数组是静态的,长度不可改变,而vector可以动态扩展,增加长度
vector < 数据类型 > 容器名
int len=v.size();
for(int i=1;i<=len;i++){
cout<<v[i];
}
格式 | 功能 |
---|---|
v.size( ) | 返回动态数组 v 中的元素个数 |
v.push_back( x ) | 向动态数组 v 尾部插入元素 x |
v.pop_back( ) | 删除动态数组 v 尾部的元素 |
v.empty( ) | 若动态数组 v 为空,则返回 true,否则返回 false |
v.clear( ) | 清空动态数组 v |
v.bengin | 返回指向 vector 头部的迭代器 ( 指针 ) |
v.end | 返回指向 vector 尾部元素的后一个元素的迭代器 (指针) |
vector<数据类型> 容器名[110]
相当于二维数组,由110个动态数组构成
stack翻译为栈,是STL中实现的一个后进先出的容器
第一个元素叫栈底元素,最后一个元素叫栈顶元素
stack< 数据类型 > 容器名
stack<int> x;
x.push(6);
cout<<x.top();
stack<int>x;
while(!x.empty()){
cout<<x.top();
x.pop();
注意:取栈顶元素和栈顶出栈都要判断栈是否为空,非空才行
stack<int>st;
格式 | 功能 |
---|---|
st.top( ) | 访问 ( 取得 ) 栈顶元素 |
st.push( x ) | 将 x 入栈 |
st.pop( ) | 删除栈顶元素( 栈顶出栈 ) |
st.empty( ) | 如果栈为空,返回 true,否则返回false |
st.size( ) | 返回栈的大小( 元素的个数 ) |
本文章使用limfx的vscode插件快速发布