C++回忆录

这篇博客回忆了C++编程中的关键点,包括语法、头文件使用、string类型操作、int与string互换、math函数、goto语句、ASCII码转换、进制转换、algorithm函数、类与结构体、向量、队列、优先队列、位运算符、Map和Set的使用等。还特别提到了动态数组、排序、栈、setw()函数以及unordered_map等内容。
摘要由CSDN通过智能技术生成

一、关于c++头文件

许久没有使用c++了,记录一下常用的固定公式。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
#include<vector>
#include<queue>
#include<math.h>
#include<bitset>
#include<map>
#include<stack>
#include<iomanip>
using namespace std;
int constant;//全局变量
int main(){
   }

二、关于语法

1.用惯了python,记得每句后面加分号,且要添加类型定义

int a=0;

2.循环

//for循环
for(int t=0;t<10;t++){
   }

//while
while(true){
   }

//do...while
do{
   }while(true)

//switch..case
switch(grade){
   
   case 'A' :
      cout << "很棒!" << endl; 
      break;
   case 'B' :
   case 'C' :
      cout << "做得好" << endl;
      break;
   case 'D' :
      cout << "您通过了" << endl;
      break;
   case 'F' :
      cout << "最好再试一下" << endl;
      break;
   default :
      cout << "无效的成绩" << endl;
}

3.输入输出

//输入
cin>>a>>b;

//输出
cout<<"123"<<endl;

//特定输入循环
//字符串(%s)、整数(%d)、字符(%c)、浮点数(%f)
while(scanf("%d.%d.%d...%d",&a,&b,&c,&d)!=EOF){
   }

//字符串输入,以空格/回车为结束
string a,b,c,d;
while(cin>>a){
   } //若输入"hello world",循环体执行两次
while(cin>>a>>b>>c>>d){
   } //输入"hello very happy world",循环体执行一次

//字符串输入,以行为单位
string tt;
getline(cin,tt);

4.typedef

typedef是替一个对象取一个别名,以此增强程序的可读性。

typedef int INT; //定义int类型的一个别名INT。注意:末尾的分号

三、关于string类型操作

#include<string>
//定义字符串
string ss="123456789";
string s1="555";
ss.append("ss");//在字符串后面追加“ss”->"123ss"
ss.append(&ss[0]);
ss.size();//返回int类型的字符串的长度
ss.empty();//判空
ss.substr(0,5);//获得字符串ss中从第0位开始的长度为5的字符串
ss.substr(6);//获得字符串ss中从第6位开始到结束的字符串
ss.find('2');//返回值是字母在母串中的位置(下标记录)(此处为1),如果没有找到,那么会返回一个特别的标记npos(此处为ss.npos)

ss.erase(10);// 从位置pos=10处开始删除,直到结尾
ss.erase(6, 4);//从位置pos=6处开始,删除4个字符
ss.erase(ss.begin()+10);//删除迭代器位置处的单个字符, 并返回下个元素的迭代器
ss.erase(ss.begin()+10, ss.end());//删除迭代器[first, last)区间的所有字符,返回一个指向被删除的最后一个元素的下一个字符的迭代器

/*下图描述*/
ss.begin();//函数返回一个迭代器,指向字符串的第一个元素
ss.end();//返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置)
ss.rbegin();//返回一个逆向迭代器,指向字符串的最后一个字符
ss.rend();//返回一个逆向迭代器,指向字符串的开头(第一个字符的前一个位置)

//连接两个字符串
cout<<ss+s1<<endl;
//倒转字符串
#include<algorithm>
reverse(ss.begin(),ss.end());
//如果出现“ error: too many arguments to function call, expected 1, have 2”的报错,则把“reverse”改为“::reverse”

图1

四、int类型与string类型的互换

1.int—>string

//int转换为string类型
int a=12;
string aa=to_string(a);

//或者,此法只能一个字符一个字符的转换,不能转换二位数以上的整数
int a=2;
char re=a+'0';

2.string—>int

//string类型转为int类型
string ss="123";
//stoi(字符串,起始位置,2~32进制),将n进制的字符串转化为十进制。
int s1=stoi(ss,0,10);//从ss字符串的0位置开始,以十进制转化

//或者
int s2=0;
for(int i=0;i<ss.size();i++){
   
	s2=s2*10+(ss[i]-'0');
}

五、关于math头文件中的常用函数

C++常用头文件——常用数学函数头文件

六、goto语句

goto label;
..
.
label: statement;

七、ASCII码转换

在计算机存储中,用ASCII码表示字符,如字符char a,b,及整形int m:
1.获取字符的ASCII码:(int)a 或 m = a;
2.获取ASCII码对应的字符:(char)a 或 a = m;
3.字符之间相加减,实质是对应的ASCII码相加减,结果为整形,如下列:
a - b 即a的ASCII码减去b的ASCII码,记为int k = a - b
结果:k
结果对应的字符:(char)k
转载:https://blog.csdn.net/jianyingyao7658/article/details/83443914?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242

ASCII

八、进制转换

1.指定格式输出

//c++
cout << "35的8进制:" << std::oct << 35<< endl;  
cout << "35的10进制" << std::dec << 35 << endl;  
cout << "35的16进制:" << std::hex << 35 << endl;  
cout << "35的2进制: " << bitset<8>(35) << endl;      //<8>:表示保留8位输出

//c
printf("%05o\n",35);    //按八进制格式输出,保留5位高位补零
printf("%03d\n",35);    //按十进制格式输出,保留3位高位补零
printf("%05x\n",35);    //按十六进制格式输出,保留5位高位补零

2.使用字符串流string,stream

#include<string>
#include<sstream>
(1)8,16->10(string—>int)
string s="20";
int a;
stringstream ss;
ss<<hex<<s;    //以16进制读入流中
ss>>a;        //10进制int型输出
(2)10->8,16(int—>string)
string s1,s2;
int a=30;
stringstream ss;
ss<<oct<<a;        //10进制转成八进制读入流中,再以字符串输出
ss>>s1;            
cout<<s1<<endl;        //输出:36
ss.clear();        //不清空可能会出错。
ss<<hex<<a;         //10进制转成十六进制读入流中,,再以字符串输出
ss>>s2;            
cout<<s2<<endl;        //输出:1e

3.itoa函数(int—>char)(除了2进制—>*进制)

#include <stdio.h>
#include <stdlib.h>
//函数原型
char *itoa(int value, char *str, int radix)

value 是被转换的整数
str 转换后存储的字符数组
radix 转换进制数,可以是 281016 等等

4.sprintf函数(int—>string)

当itoa不好使的时候,可以使用这个,功能更强大。
C++中sprintf()函数的使用详解

int your_number;
char itoa_str[60+1];
sprintf(itoa_str, "%d", your_number);

5.stoi函数(string—>int)(*进制—>十进制)

//函数原型
int stoi(const string &str, size_t* idx = 0, int base = 10)

str: 要转换的string
idx: 为size_t*类型,是从str中解析出一个整数后的下一个字符的位置
base: 指出string中要转换的数的进制,即str所代表的是个什么进制的数,如是base默认为10, 若base = 0, 表示由编译器自动判定str所代表的数的进制

//二进制——>十进制
int re=stoi("0001",0,2) //re=1

6.bitset(int/char/string—>bitset)(十进制—>二进制)

#include<bitset>
bitset<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值