C++笔记
课上写的
1.常用
c
#include<bits/stdc++.h>//引入大部分库,不要经常用
#include<iostream>
#include<cmath>//数学库
#include<string>//字符库
#include<algorithm>//算法库
using namespace std;
//结构体
struct su{
int yu,shu,yi;
int hao,sum;
}j[10000];
int main() {
int a;
string b;
cin >> a;
cin.ignore()//用了上面的cin,然后要用下面的输入 要先清楚缓存区
getline(cin, b);//输入整行
scanf("%d",&a);
cout << "Hello world" << endl;
printf("%.3lf", a); //如果a是浮点类型,那么这个输出表示保留3位小数输出
return 0;
}2.函数
c
#.size();//字符串长度
#.push_back('b');//向末位添加一个字符
#.pop_back();//移除末位单个字符
#.toupper();//转大写
a[i] = toupper(a[i]);//字符串a的第i个字符被赋值
#.tolower();//转小写
a[i] = tolowe(a[i]);
#.insert();//插入
a.insert(2,"word");//在下标为2的位置插入字符串word,也可以插入字符串b
#.erase();//移除
a.erase(0,2);//在下标为0的位置开始删除2个字符
#.substr();//截取子串
a.substr(0,2);//在下标为0的位置开始截取2个字符
#.find();//寻找子串
a.find("word")//找到返回值为开头位置,找不到返回-1
reverse();//反转字符串,需要算法类库
reverse(a.begin(),a.end())
stoi()//字符串转int类
int b = stoi(a);
to_string()//int转字符串
string a = to_string(b);
sort()//给字符串排序,需要导入算法
sort(a.begin(), a.end());
getline()//输入整行
getline(cin,a)
max(),min()//最大值和最小值
int j = max(a,b);
max(a,max(b,max(c,d)))//多个值比大小
sqrt()//开平方根
double b = sqrt(a);
pow()//开n次方
int b = pow(a,7);//b被赋值为a的7次方
swap()//交换两个数的值
swap(a,b);
sort()//排序
sort(j+1,j+n+1,abc);//从下标1开始到n+1,abc是自定义排序规则
menset()//重置为03.编写函数
1.判断素数
c
int su(int n) {
// 1. 处理小于等于 1 的情况
if (n <= 1) return 0;
// 2. 2 是唯一的偶素数
if (n == 2) return 1;
// 3. 排除掉所有的偶数(提高效率)
if (n % 2 == 0) return 0;
// 4. 只检查奇数因子,且范围缩小到 sqrt(n)
int a = sqrt(n);
for (int i = 3; i <= a; i += 2) {
if (n % i == 0) {
return 0; // 找到能整除的因子,说明不是素数
}
}
return 1; // 循环结束未发现因子,则是素数
}2.拆数字
c
int n;
while(n)
{
int a = n;
a %= 10; //这个是已拆的数字
n /= 10;
}3.最大公因数
c
int gys(int a,int b)
{
//取绝对值
a = abs(a);
b = abs(b);
while(b != 0)
{
int c = a % b;
a = b;
b = c;
}
return a;
}4.算法
1.二分查找
等待更新
2.前缀和,差分
1.前缀和
S[0] = 0 S[1] = a[1] S[2] = a[1] + a[2] S[3] = a[1] + a[2] + a[3] 以此类推:S[i] = S[i-1] + a[i]
求区间和公式Sum(l, r) = S[r] - S[l-1]
c
int s[1000009];
int s1[1000009];
for(int i=1;i<=n;i++)
{
std::cin>>s[i];
s1[i]=s1[i-1]+s[i];
}
int r,l;
std::cin>>l>>r;
std::cout<<s1[r]-s1[l-1]<<std::endl;2.差分
1.差分数组 D 的定义:
D[1] = a[1]
D[i] = a[i] - a[i-1] (也就是当前项减去前一项)
2.区间修改
在 x 处加 z : D[x] = D[x] + z
在 y+1 处减 z : D[y+1] = D[y+1] - z
3.区间还原
A[1] = D[1]
A[2] = D[1] + D[2]
A[3] = D[1] + D[2] + D[3]
可以定义一个ans累加