![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++基础
Mzylq
可以很笨,但不能很懒
展开
-
P18 位运算
首先,右移操作符 >> 将二进制数 x 向右移动 i 位,即 x >> 2 = 001011。然后,位与操作符 & 将移动后的二进制数和 1 进行按位与操作,即 (x >> 2) & 1 = 001011 & 000001 = 000001 = 1。快速判断一个数字是否为2的幂次方 公式:x&(x-1) 如果x为2幂次方,则x的二进制中只有一个1,x-1就有很多个连续的1并且和x的1没有交集,二者与运算一定为0,获取二进制数的某一位 公式:x>>i&1 结果必然为0或1,表示x的二进制表示中的第i位。原创 2024-02-23 23:07:58 · 594 阅读 · 0 评论 -
P17 二分法 倍增
研究并发现数据结构单调性,并确定最大区间[l,r]确实分界点一定在里面,具体有一些细节:若以r作为答案,那么答案区间在[l+1,r]一般情况下,我们会将答案进行二分,然后在枚举某个可能解后判断其是否可以更优。整数二分:在已有的序列数组上,进行二分查找,一般找出某个值的位置。二分法适用于有序数据集合,并且每次迭代可以将搜索范围缩小一半。倍增算法是一种优化算法,通常应用某些需要高效计算指数幂的场景。1.整数二分 2.浮点二分 3.二分答案 (最常见)可以将问题搜索范围一分为二,浮点二分:是从实数范围内查找。原创 2024-02-21 20:13:44 · 340 阅读 · 0 评论 -
P15 差分 离散
diff[l]+=x;diff[r+1]-=x表示将区间[l,n]都加上x, 但是[r+1,n]完美并不想加x,所以再将[r+1,n]减取x即可。例如原数组的范围是[1,1e9],而数组大小仅为1e5,那么元素值的“种类”最多也就1e5种,从而可以利用一个数组来表示某个元素的排名。对差分数组做前缀可以还原为原数组:diff[1]=a[1] diff[2]=a[2]-a[1]离散把无限空间中有限的个体映射到有限的空间中取,以此提高算法的时空效率。diff[i]=a[i]-a[i-1]{原数组}原创 2024-02-21 14:07:43 · 318 阅读 · 0 评论 -
P13 进制
最终,ans的值为1+0+1+1+0+1=4。进制本质,每一个数位上的数字乘上这一位的权重。再计算机中,数字均通过二进制补码表示。- 当a[1]为0时,跳出循环。- 当a[2]为0时,跳出循环。- 当a[3]为0时,跳出循环。因此,程序输出为4。原创 2024-02-19 10:08:06 · 583 阅读 · 0 评论 -
P12 递归
1.直观、简介,易于理解和实现 2.适用于问题的规模可以通过递归调用不断减小奥。实现过程:1.将大问题分解为规模更小的子问题 2.使用递归调用解决每个子问题。1.避免无线递归 2.考虑边界,有时候窗口不止一个。3.可以处理复杂的数据结构和算法,如数和图的遍历。当满足条件时候,递归结束,避免无线递归。递归是指函数直接火间接调用自身的过程。3.通过递归终止条件来结束递归。原创 2024-02-18 20:24:10 · 333 阅读 · 0 评论 -
P9 stack queue队列 priority_queue优先队列(重要) deque 双端队列
push_back()插入尾部元素 push_front()插入头部元素 pop_back()弹出尾部元素 pop_front()弹出头部元素 front()返回头部元素 back()返回尾部元素。push()插入首元素 pop()弹出顶元素 top()返回顶元素 empty()检查是否为空。push()插入尾元素 pop()弹出顶元素 front()返回顶元素 back()返回尾元素。push()插入优先队列元素 pop()弹出顶元素 top()返回顶元素。queue提高了一组函数来操作和访问元素。原创 2024-02-16 14:46:56 · 446 阅读 · 1 评论 -
P8 pair vector
比如pair pair 3默认会转入第一个first中的int “mike”传入string。相当于在上中可以用p1代替second的位置或者first位置,但取的时候要用second.first或者其他的。使用pair类,可以方便地将两个值组合在一起,并进行传参、存储、操作。pair也可以嵌套,让一个pair 对象作为另一个pair对象的成员。pair是一个模板类,用于表示一对值的组合,用中。size()获取元素的数量。原创 2024-02-11 22:56:32 · 709 阅读 · 1 评论 -
P7 其他函数库 memset swap reverse
void* memset(void* ptr【指向设置值的内存块指针】,int value【要设置值 是一个整数8位二进制】,size_t num【要设置字节数】)unique()一个去除容器中相邻重复元素的函数,并返回一个指向去重后范围的尾后迭代器。void reverse(用地址/迭代器:a,a+n])它会将[first,last]范围内的元素按相反顺序重新排序。memset()函数将ptr指向内存块的前num个字节设置为value的值,它返回一个指向ptr的指针。但是设置0与-1是准确的。原创 2024-02-08 22:03:44 · 349 阅读 · 0 评论 -
p6 全排列 next_permutation prev_permutation
next_permutation 函数用于生成当前序列的下一个排序,如果存在下一个排列,则更改下一个排列返回true,如果当前序列已经是最后一个排列,则更改为第一个序列,并放回false。结果:123 132 213 231 312 321 要想展示全部序列第一个必须是最小的。prev_permutation与next_permutation相反倒着排序。原创 2024-02-08 21:16:46 · 400 阅读 · 0 评论 -
P4 二分查找 binary_search lower_bound upper_bound
binary_search(开始,结尾,查找值)用于已排序的序列中通过二分查找算法俩确定序列是否纯在目标元素。lower_bound(开始,结尾,值)返回地址[开始,结尾)中第一个大于等于值得元素地址。upper_bound(开始,结尾,值)返回地址[开始,结尾)中第一个大于值得元素地址。如果要找这个数字在那下标出现则是[lower_bound,upper_bound]返回值是bool值(因此只有true/false),表示目标元素是否纯在序列中。二分查找只能对于数组并且那数组是单调。原创 2024-02-07 16:48:49 · 458 阅读 · 1 评论 -
p5 大小写转换 islower isupper tolower toupper
tolower(转换小写)/toupper(转换为大写)函数,但是通过转为小写那个不是大写则不能转换同理。islower(判断小写)/isupper(判断大写)用于字符分类函数,用于检测是否为小写或者大小字母。需要头文件 返回值为bool。大写+32=小写 小写-32=大写。这里char字符才能转换。原创 2024-02-07 17:12:57 · 417 阅读 · 1 评论 -
P3 Sort与min max与确定小数后几位
min(a,b) max(a,b) 功能估计就不介绍了,并且max与min也可传列表({ 2, 3, 4, 5, 6 })cout << fixed << setprecision(6) << num << endl;而这里 nth_element(起始,选定值,结尾)作用是排序,但是这数规定前后大小,但不精确每一个值。但如果要改为<,则要用比较函数bool,因为函数返回一个bool类型的值,表示a和b的大小关系所以是。Sort(起始地址,结束地址的下一位,*比较函数)快速排序 比较函数默认为<原创 2024-02-01 22:50:08 · 305 阅读 · 1 评论 -
p2 string用法
其中,“&”是引用符号。这里string x(数字,‘字符’)可构成那个多少个字符,这里取得“aaaa”S.compare(d)大于为1,小于为-1,等于0,从第一个开始比较,以此类推。s.substr(起始字符,长度)这里取得dd,这里第一个字符是(不要越界)S.replace(p,n,s)删除从p开始的n个字符,然后在p处插入串s。“auto”是自动类型推断关键字,“&”是引用符号,“s”是遍历范围。S.replace(字符起始位置,长度,替换字符)s.length()取字符长度【没有/0】原创 2024-01-31 16:04:25 · 411 阅读 · 0 评论 -
P1 如何输入与输出与取消同步
#include `:定义了对输入输出进行格式化的函数和操作符,比如可以通过`std::setw`来指定输出的宽度。#include `:定义了输入输出流,使得我们可以方便地使用输入(cin)和输出(cout)操作。同时也定义了`cerr`和`clog`流,用于错误和日志输出。#include `:定义了字符串类型和相关的操作,使得我们可以方便地操作字符串。Cin>>x>>y 输入X,Y Cout原创 2024-01-05 01:01:48 · 396 阅读 · 1 评论