Skip to content

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()//重置为0

3.编写函数

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累加

其他