C++
莫愁-前路
这个作者很懒,什么都没留下…
展开
-
C++ 构造二维vector和初始化
构造一维vector在构造二维vector前先看一下vector的构造函数vector():创建一个空vectorvector(int nSize):创建一个vector,元素个数为nSizevector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为tvector(const vector&):复制构造函数vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中构造二维vector原创 2021-05-26 16:15:56 · 764 阅读 · 0 评论 -
巧用n&(n-1)
首先了解一下n&(n-1)的作用:将n的二进制中最右边的1变为0。举例:n = 10010 (n - 1) = 10001n & (n - 1) = 10000利用这一特性,可以一下计算:求某一个数的二进制表示中1的个数思路:有二进制中有多少个1,就需要将n的二进制中最右边的1变为0多少次int count = 0;while (n != 0) { n &= (n-1); count++;}2、 判断一个数是否是2的方幂思原创 2020-11-08 23:24:16 · 292 阅读 · 0 评论 -
std::ios::sync_with_stdio(false),tie(0)及其局限性
std::ios::sync_with_stdio(false)提高效率在c++中之所以cin,cout效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消`iostream`的输入和输出缓存,可节省时间,使效率与scanf与printf相差无几,还有应注意的是`scanf`与`printf`使用的头文件应是stdio.h而不是 iostream。局限性使用std::ios::sync_with_stdio(false)后,cin(),cout()不能与printf(原创 2020-10-02 21:04:24 · 952 阅读 · 4 评论 -
cin与getline混用时注意事项
当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>> 会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。但是,getline() 读取数据时,并非像 cin>> 那样忽略第一个换行符,getline()发现 cin 的...原创 2020-04-23 22:08:53 · 434 阅读 · 0 评论 -
map的注意事项
C++ map注意事项 1、在map中,由key查找value时,首先要判断map中是否包含key。2、如果不检查,直接返回map[key],可能会出现意想不到的行为。如果map包含key,没有问题,如果map不包含key,使用下标有一个危险的副作用,会在map中插入一个key的元素,value取默认值,返回value。也就是说,map[key]不可能返回null。3...转载 2020-04-21 18:18:41 · 490 阅读 · 0 评论 -
vector去重
unique函数是STL中的去重函数,其会删除相邻元素的重复元素,即将不重复的元素往前移动,覆盖重复的元素,而原来的vector长度并没有发生改变,故要与erase函数结合使用才能达到去重的目的。一般来说,unique前应先sort。unique函数原型如下://return :: 返回一个迭代器,指向unique之后的不重复序列中最后一个元素的下一个元素 //两个参数,去重范围[...原创 2020-03-09 10:22:00 · 579 阅读 · 0 评论 -
C++ string类总结
1. 初始化string str——构造空的string类对象,即空字符串string s(str):生成字符串为str的复制品string str("ABCDE")——等价于 str="ABCDE"string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值string str("ABCDE...原创 2020-03-01 21:35:00 · 458 阅读 · 0 评论 -
C++头文件bits/stdc++.h
在刷算法题时,你经常会遇到#include<bits/stdc++.h>头文件,其实该头文件是一个c++万能头文件,包含遇到的所有有文件。当我们忘记某函数包含在那个头文件下时或者头文件包含较多时,可以用这个万能头文件代替,但是他也有缺点。最明显的问题就是编译时间太长。另外,<bits/stdc++.h>不是c++的标准头文件,所以有部分编译器不支持。...原创 2020-02-25 11:04:00 · 685 阅读 · 0 评论 -
C++取绝对值
添加头函数#include<cmath>对于整数:int abs(int i)对于浮点数:double fabs(double i)float fabs(float i)C++11标准double abs (double x);float abs (float x);long double abs (long double x);double...原创 2020-02-24 17:49:00 · 3611 阅读 · 0 评论 -
C++四舍五入后保留一位小数
C++中提供了四舍五入的函数round(),在cmath的头文件中,但是四舍五入后小数变为整数,要使保留一位小数可以先乘10,再利用round函数四舍五入,再除以10.0。代码如下:#include <iostream>#include <cmath>using namespace std;int main(){ cout <<...原创 2020-02-05 10:41:00 · 9223 阅读 · 3 评论 -
为什么不能在函数中申请大数组?
1. 简而言之,数组定义在函数中时,占用的内存来自栈空间,栈空间是在进程创建时初始化的,有固定的大小,一般很小,所以太大的数组会耗光栈空间。全局变量一般分配在数据段,可以比较大。2.BBS段、数据段、代码段、堆与栈及5大内存分配BSS段(Block Started by Symbol):BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS...原创 2020-02-04 09:28:00 · 525 阅读 · 0 评论 -
清空C++ sstream缓冲区
在for循环中每次调用ss.clear()是希望在每次使用完ss之后清理strStream占用的资源,但stringstream的clear方法并没有真正地释放ss占用的空间,这样ss所占用的空间一直在增长。当size较大时,ss消耗的内存迅速增长,可能出现严重问题。正确方法如下:stringstream ss;for(...){ ss.clear(); ss.st...原创 2020-02-02 10:04:00 · 699 阅读 · 0 评论 -
C与C++中的字符数组char*和字符串string的相互转化
1. 将字符数组char[]转化为字符串stringchar ch [] = “ABCDEFG”;string str(ch);//也可string str = ch;//或者char ch [] = “ABCDEFG”;string str;str = ch;//在原有基础上添加可以用str += ch;2. 将字符串string转化为字符数组char[]char b...原创 2020-01-30 11:10:00 · 272 阅读 · 0 评论 -
STL
STL1.输入输出1.1.C语言的输入输出 int a; scanf("%d\n", a); printf("%d", a);1.2.C++语言的输入输出 int a,b,c; cin>>a>>b>>c; cout<<a<<b<<c<<endl;...原创 2020-01-23 17:44:00 · 158 阅读 · 0 评论 -
STL中的堆heap
在STL中堆heap的算法都包含在#include<algorithm>头文件中,主要包含以下函数:make_heap()生成堆,默认less(生成大顶堆)make_heap(_RAIter,_RAIter)默认生成大顶make_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(生成小顶堆),一种是les...原创 2020-04-19 13:45:49 · 199 阅读 · 0 评论