C++基础总结

头文件

#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

强制数据类型转换:(数据类型)(变量)

输入输出

scanf和printf

#只用于基本数据类型 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码

字符 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(表达式){
        语句组
    }

双分支

if-else语句
    if(表达式){
        语句组1
    }else{
        语句组2
    }
条件运算符
    (表达式1)?(表达式2) :(表达式3)

多分支

级联if-else if语句
    if( 表达式1){
        语句组1
    }else if(表达式2){
        语句组2
    }else{
        语句组3
    }
switch语句
    switch(表达式){
        case 常量表达式1:
            代码段1
            break;
        case 常量表达式2:
            代码段2
            break;
        default:
            代码段3
            break;
    }

循环语句

for循环

#知道循环次数

    for(初始值;循环条件;条件改变){
        循环体
    }

while循环

    while(循环条件){
        循环体
    }

do-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

  可以存储空格

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

STL容器

  C++标准模板库

string

  用来存储字符串的一种类型

  比字符数组高级,便捷

  有结束符' /0 '

  getline用来输入含空格的字符 getline ( cin , 变量 )

string定义

string s;

string遍历

string s="abcdefg";
int len=s.size();
for(int i=1;i<=len;i++){
	cout<<s[i];
}

string常规操作

格式 功能
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可以动态扩展,增加长度

vector定义

  vector < 数据类型 > 容器名

vector遍历

int len=v.size();
for(int i=1;i<=len;i++){
	cout<<v[i];
}
vector常用操作
格式 功能
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数组

  vector<数据类型> 容器名[110]

  相当于二维数组,由110个动态数组构成

stack

  stack翻译为,是STL中实现的一个后进先出的容器

  第一个元素叫栈底元素,最后一个元素叫栈顶元素

stack定义

  stack< 数据类型 > 容器名

stack访问

stack<int> x;
x.push(6);
cout<<x.top();

stack遍历

stack<int>x;
while(!x.empty()){
	cout<<x.top();
	x.pop();

stack常用操作

  注意:取栈顶元素和栈顶出栈都要判断栈是否为空,非空才行

  stack<int>st;

格式 功能
st.top( ) 访问 ( 取得 ) 栈顶元素
st.push( x ) 将 x 入栈
st.pop( ) 删除栈顶元素( 栈顶出栈 )
st.empty( ) 如果栈为空,返回 true,否则返回false
st.size( ) 返回栈的大小( 元素的个数 )

本文章使用limfx的vscode插件快速发布