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

🌃大纲

🌃基础篇

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类

  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)

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

相关推荐
ajassi20002 小时前
开源 C++ QT QML 开发(六)自定义控件--波形图
c++·qt·开源
_OP_CHEN2 小时前
C++基础:(八)STL简介
开发语言·c++·面试·stl
it技术3 小时前
C++ 设计模式原理与实战大全-架构师必学课程 | 完结
c++
zhuzhuxia⌓‿⌓4 小时前
线性表的顺序和链式存储
数据结构·c++·算法
小苏兮4 小时前
【C++】stack与queue的使用与模拟实现
开发语言·c++
未知陨落4 小时前
LeetCode:95.编辑距离
算法·leetcode
杨小码不BUG4 小时前
小鱼的数字游戏:C++实现与算法分析(洛谷P1427)
c++·算法·数组·信奥赛·csp-j/s
高山有多高4 小时前
栈:“后进先出” 的艺术,撑起程序世界的底层骨架
c语言·开发语言·数据结构·c++·算法
普罗米修斯5 小时前
C++ 设计模式理论与实战大全【共73课时】
c++·后端