先基础: C++中 C没有的;
竞赛用C++17
#include<bits/std++.h>标准命名空间 --> 无需再打"std::" std::swap();
cout << arr[i]<<" \n"[i == 2] //i==2时换行 ,else 输出空格
cout.flush();//刷新缓冲区 (交互题maybe会用到)
//取消同步流可能会卡在某个地方,无法输出,所以需要刷新缓冲区
getline(cin,s);
stringstream ss(s); //传递
getline(cin,s, ','); getline 可加分隔符"," 输入时"a b c ....." "a,b,c,d....."都可
引用
int a =10;
int& ref =a;//自动转换为int* const ref = a;指针常量是指针指向不可改,也说明为什么引用不可更改
//ref为 指针变量,
ref =20;//内部发现ref是引用,自动帮我们转换为; *ref = 20;
常量指针 const在前 const int* ref 指针常量 --常量的指针,指向常量的指针
可改方向
swap(int& a,int& b){} 内交换,外面就交换
函数
默认参数
void build (int u, inr v =1,r =10000) 函数可赋初始值,赋值在后,后面也必须全赋上初始值
若传相应的参数,覆盖相应的默认参数
对象&类
add(int a,int b){
return a+b; //只能对int用
}
template <class T>
T add(T a,T b){
return a + b; //任意变量
}
template 声明创建模板
class 类 可以用typename代替
类模板
类模板没有 自动类型推导 的使用方式(c++17后增加了类模板类型推导)·
类模板在模板参数列表中 可有默认参数
template <class T = int, int N =1000> 默认数据类型&变量值;
STL库
swap();不用手写,库中自带. 底层实现也是一个模板函数...
min();max();
cout<<min({2,3,4,5}) 多值
abs(); 绝对值
sqrt();
atan2(1,1); 角度 返回弧度 PI/4
max_element() 求一个数组中的最小值;
int a[]={2,3,1};
int minx = *min_element(a,a+3)//a-->a+3 初 -->数组末
cout<< minx << endl;
prev_permutation() next_permutation () 全遍历O(n!),单次最坏O(n)
__gcd() gcd()C++内定,最大公约数 lcm() --最小公倍数
__lg(10) 对传入的数log2 10 ,(2进制下有多少位)
运算符重载
sort();从小到大排序
从大到小 重载<
bool operator < (const Node& B) const { //const 通用?这老师也没讲清... 记住啊记住
return w < B.w;
}
sort(a,a+10); 也可以传迭代器
迭代器
不是指针,似指针.模拟指针功能.
string 内部封装了一个类
《黑马》——C++提高编程_黑马程序员c++讲义_Netfishless的博客-CSDN博客
构造函数原型:
string();
//创建一个空的字符串 例如: string str;string(const char* s);
//使用字符串s初始化string(const string& str);
//使用一个string对象初始化另一个string对象string(int n, char c);
//使用n个字符c初始化
- 尾插 — push_back
- 尾删 — pop_back
- 插入 — insert (位置迭代器) //比前面俩个慢,每个项都要往后移动
vector 预留空间
fread
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
char c[] = "This is runoob";
char buffer[20];
/* 打开文件用于读写 */
fp = fopen("file.txt", "w+");
/* 写入数据到文件 */
fwrite(c, strlen(c) + 1, 1, fp);
/* 查找文件的开头 */
fseek(fp, 0, SEEK_SET);
/* 读取并显示数据 */
fread(buffer, strlen(c)+1, 1, fp);
printf("%s\n", buffer);
fclose(fp);
return(0);
}