C++
文章平均质量分 79
chenchen216
这个作者很懒,什么都没留下…
展开
-
C++11 Lambda表达式
C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda表达式的基本构成:[capture](parameters) mutable ->return-type{ statement}[函数对象参数](操作符重载函数参数)mutable ->返回值{函数体}函数对象参数;[],标识一个Lambda的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambd转载 2021-01-18 22:38:12 · 366 阅读 · 0 评论 -
C++ pair的基本用法总结(整理)
pair<T1, T2> p1; //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。pair<T1, T2> p1(v1, v2); //创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。make_pair(v1, v2); ...原创 2020-03-01 19:20:14 · 619 阅读 · 0 评论 -
C++验证奇偶性时求余运算%和位运算&的速度比较
假设验证数 m 的奇偶性:一般会想到直接用求余运算,即 m % 2; 用位运算也可以达到一样的效果,即 m & 1;式子就是求二进制末尾的数是 0 还是 1;二者的运算都是奇数返回1,偶数返回0;但是最近遇到一道题,在验证的时候二者的运行速度差距比较大(先说结果:位运算 优于 求余运算),针对这个问题,我进行了测试,代码如下:测试编译器:QT Creator自带编译器...原创 2019-11-17 21:24:55 · 1013 阅读 · 0 评论 -
如何输入带有空格的string字符串
利用 getline(cin,string)#include <string>#include <iostream>using namespace std;int main(){ string s1,s2; getline(cin,s1); getline(cin,s2); cout<<s1<<endl&...原创 2019-11-01 20:41:11 · 2098 阅读 · 0 评论 -
收集string字符串的所有子串
代码如下://O(N^2)vector<string> getAllSubString(string str){ vector<string>arr; string m; int i,num; for(int len = 1; len <= str.size(); len++){ i = num = 0; ...原创 2019-11-01 19:59:07 · 541 阅读 · 0 评论 -
二分查找第一个比k大的数下标和最后一个比k的数下标
1.二分查找第一个比k大的数下标举例:int arr[5] = {1,2,3,4,5};若查找 k = 0; 则返回最左下标,即返回 0; 若查找 k = 3; 则返回下标 2; 若查找 k = 6;则返回最右下标的下一个,即返回 arr 的长度 5;(返回结果需要检测的地方)int getSubMaxK(vector<int>arr, int L ,int R, i...原创 2019-11-01 17:19:01 · 925 阅读 · 0 评论 -
C++查找子串string.find()与string::npos
string.find()string str = "abc";string subStr1 = "bc";string subStr2 = "cd";str.find(subStr1); //返回1,第一个匹配的下标str.find(subStr2); //返回string::npos,不是子串的话,返回一个特殊值//subStr1是否为子串if(str.find(subSt...原创 2019-11-01 11:47:05 · 732 阅读 · 0 评论 -
C++程序运行时间测试代码
#include<iostream>using namespace std;#include <time.h>int main(){ clock_t start = clock(); //测试块----------- //自己程序放入 //------------ clock_t ends = clock(); ...转载 2019-04-11 14:05:32 · 669 阅读 · 0 评论 -
string类常见用法
需要包含头文件和命名空间#include<string>using namespace std;目录1. 声明2.string与C字符数组的比较2.1、C风格字符串2.1、C字符数组及其与string串的区别2.3、string对象的操作3.字符串操作函数string类函数4.int型与string型的互相转换0.困惑点关...转载 2019-04-08 15:33:58 · 405 阅读 · 1 评论 -
reverse()和reverse_copy()用法
需要包含头文件:#include<algorithm>reverse()reverse(beg,end):reverse()会将区间[beg,end)内的元素全部逆序;例子1:反转string#include <iostream>using namespace std;#include<string>#includ...原创 2019-04-12 19:36:55 · 3157 阅读 · 0 评论 -
C++中"endl"和"\n"的区别
换行符"endl"该符号与"\n"的区别:"endl"除了具备"\n"的功能外,还调用输出流flush函数,刷新缓冲区,让数据直接写入文件或者屏幕上。这两种都可以用的。不过如果需要立即显示,比如输入到显示器的场合,最好用"endl",如果不需要立即显示,并且要兼顾代码的执行效率的时候,可以考虑\n,这样不刷新缓冲区,会更快。同理,由于没有调用输出流的fflsh函数来刷新缓冲区,所以这时的...转载 2019-04-09 20:26:03 · 703 阅读 · 0 评论 -
字符串类型相关
前言做了个笔试题,最后一题卡在char相关转换的问题上,笔者直接心态崩了,这里对于C还是不熟悉,所以特地写下这个博客,希望好好掌握char类型。引用看学习视频中老师的一句话:一个普通程序员在企业中 90%的精力,都花在了字符串的处理上。从上面这句话,我们足以能看出字符串的重要性,这也决定了字符串在各大面试和笔试中,都极易考到。目录1.char类型2.字符串类型...原创 2019-04-21 00:31:44 · 310 阅读 · 0 评论 -
堆和栈的区别
堆:主要用于存储new出来的对象栈:主要用于对对象的引用,即对象的地址目录一、预备知识—程序的内存分配二、例子程序二、堆和栈的理论知识2.1申请方式2.2申请后系统的响应2.3申请大小的限制2.4申请效率的比较:2.5堆和栈中的存储内容2.6存取效率的比较2.7小结: ...转载 2019-04-13 21:56:32 · 121 阅读 · 0 评论 -
C++生成0到n之间的随机数
利用srand()种子填充,和rand()函数srand()函数:随机数发生器的初始化函数,需要提供一个种子,这个种子会对应一个随机数。如果使用相同的种子,rand() 函数会出现一样的随机数。默认种子数是1,即srand(1)。 rand()函数:伪随机数发生器,需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每行代码都可以产生不同的随机数。 #includ...原创 2019-04-17 09:12:10 · 6941 阅读 · 0 评论 -
内存泄漏和内存溢出的区别和联系
1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。...转载 2019-04-15 13:14:23 · 127 阅读 · 0 评论 -
C++ 删除文本数据中第一个元素
由于项目需要删除第一个字符,然后按照相同顶格显示,如下:v -279.268005 37.345402 -2.081520v -280.971985 37.074699 -1.353890v -279.015991 44.888100 -1.609860需要转化为:-279.268005 37.345402 -2.081520-280.971985 37.074699 -1...原创 2019-05-05 13:13:25 · 835 阅读 · 0 评论 -
关于mid=(low+high)/2与mid=low+(high-low)/2的区别
----------------------------------这个在二分查找里经常写到,但是之前不重视。这两种用法里,用 mid=low+(high-low)/2 这种写法好,虽然数学上是一样的,但是mid=(low+high)/2 中的加法可能会发生溢出。...原创 2019-09-03 21:27:25 · 3435 阅读 · 2 评论 -
error: “自定义函数XXX” must take exactly one argument
主要问题在于,类里面的重载的二元运算符时, 只需要一个参数,另一个参数由this指针传入,这里如果需要传入两个参数,需要放到类外定义,声明友元(访问私有数据和函数)。如下:class myTask{public: myTask(int a, int b):c(a),p(b){} //类内重载只需要一个参数,所以需要友元;而不声明友元则无法访问私有成员 fri...原创 2019-10-09 08:34:42 · 8891 阅读 · 0 评论 -
头文件 sting.h 和 cstring 还有 string 区别
<cstring>是C标准库头文件<string.h>的C++标准库版本,包含了C风格字符串(NUL即'\0'结尾字符串)相关的一些类型和函数的声明,例如strcmp、strchr、strstr等。<cstring>和<string.h>的最大区别在于,其中声明的名称都是位于std命名空间中的,而不是后者的全局命名空间。<string>...原创 2019-04-11 13:20:57 · 486 阅读 · 0 评论 -
位操作——无参交换及其弊端
有参交换很常见,引入变量void swap(int *a ,int *b){ int tmp = *a; *a = *b; *b = tmp; }求和法当要比较的两个数据较大时,求和易发生溢出风险。void swap(int *p1,int *p2){ *p1 = *p1 +*p2; *p2 = *p1 -*p2; ...原创 2019-04-06 15:23:40 · 388 阅读 · 0 评论 -
C++ const修饰符
const 主要用来修饰数据成员、成员函数、类对象。1.修饰指针情况int b = 500;const int * a = &b; //情况1int const * a = &b; //情况2int * const a = &b; //情况3const int * const a = &b; //情况4对于修饰指针的情况,只要看c...转载 2018-07-17 23:02:58 · 199 阅读 · 0 评论 -
C++ static关键词修饰类
static若修饰以下时:全局变量 外延性 ,加上static后, 作用域仅限于本文档局部变量 存储位置从栈上变成data段的rw段或者(未初始化时放在bss段),生命周期跟整个进程的周期一样 C++中,static 在类内部的表现,用来实现族类对象间的数据共享。在生成对象的时候,普通数据成员才有空间。而 static 成员在类声明的时候,就已经开辟了空间,在data ...原创 2018-07-18 09:24:36 · 2275 阅读 · 2 评论 -
C++指向类成员的指针
指向类成员以前C定义指针int a;int *p=&a;void func();void (*pf)() = &func;而在这里本质也是相同(去掉类名 :: 就是上面的形式),定义如下:成员类型 类名 :: * 指针名 = &类名 :: 成员名;函数返回类型 (类名 :: *函数指针名)(参数列表) = & 类名 ::...原创 2018-07-18 16:30:19 · 759 阅读 · 0 评论 -
C++ 友元
友元一般存在于不同类之间,在一个类中,可以用全局函数作友元函数。而在不同类中,类成员函数作友元函数友元可以是一个函数,该函数被称为友元函数,函数既可以是全局也可以是类的成员;友元也可以是一个类,该类被称为友元类。同类对象间无私处,异类对象间有友元友元目的本质:是让其它不属于本类的成员(全局函数,其它类的成员函数),成为类的成员而具备了本类成员的属性。友元函数是可以直接访问...原创 2018-07-18 17:54:41 · 3405 阅读 · 2 评论 -
C++运算符重载
这一块内容很多,我记录一下主要的格式和大致用法。1.对于全局函数(友元)单目:以负号(-)为例 (类为A) 这里,[ ]里面的是需要具体情况而判断是否加上[const] A [&] operator- ( [const] A & c1) 双目:以加法(+)为例[const] A [&] operator+ ([const] A &am...原创 2018-07-19 16:05:06 · 101 阅读 · 0 评论 -
C++函数重载 (初学)
恶补C++中,看视频学到了函数重载,放一些笔记以备后面回顾。函数重载规则:1,函数名相同。2,参数个数不同,参数的类型不同,参数个数不同,参数顺序不同,均可构成重载。3,返回值类型不同则不可以构成重载。(如:int p(int a) 和 float p(int a)这种是无法编译通过的,会报错,这种不是重载)重载的匹配原则:1,严格匹配,找到则调用。一2,通过隐式转换寻求一个匹配,找到则调用。(隐...原创 2018-07-13 21:03:49 · 156 阅读 · 0 评论 -
C++引用(初学)
继续学习C++的引用先说关于一个别名:变量名,本身是一段内存的引用,即别名(alias)。此处引入的引用,是为己有变量起一个别名。int main(){int a=500; //这里实际上表示 *(int*) a = 500; 这里的a为变量名,实质是一段内存空间的别名}再看下一例子int main(){int a; int & p=a; ...原创 2018-07-13 22:10:43 · 115 阅读 · 0 评论 -
C++引用(提高)
对于C++引用提高篇学习的听课笔记 引用的本质是指针,C++对裸露的内存地址(指针)作了一次包装。又取得的指针的优良特性。所以再对引用取地址,建立引用的指针没有意义。有如下规则:1.可以定义指针的引用,但不能定义引用的引用。int a;int * p = &a;int * & rp = p; //ok 这是对指针定义一个引用(顺着读就行)int & r = a;...原创 2018-07-13 22:49:25 · 163 阅读 · 0 评论 -
C++继承和派生(初学)
继续学习C++,学习到继承和派生定义:类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。派生与继承,是同一种意义两种称谓。(继承相当于“子承父业”,而派生相当于“父亲派生出了一个儿子”,两者的角度不同,本质一样)下例就是一个继承://C++通过继承关系,实现了代码的可重用性class H...原创 2018-07-14 08:13:01 · 190 阅读 · 0 评论 -
C++ new/delete Operator
区别:c语言中提供了malloc和free两个系统函数,完成对堆内存的申请和释放。 // 这是#include<stdlib.h>库函数而c++则提供了两关键字new和delete; //这是关键字,级别上升了 (key words)后续再补...原创 2018-07-14 09:45:11 · 120 阅读 · 0 评论 -
C++内联函数
宏函数c语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用的开销。但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错。举例: #define SQR(i) ((i)*(i))int main(){int i=4;SQR(i); //这种形式是可以的,这样的话,宏函数可以直接替换SQRSQR(i++); //不同编译器解释也...原创 2018-07-14 10:06:34 · 172 阅读 · 0 评论 -
C++命名空间NameSpace
继续学习,记录笔记为什么要引入namespace? 命名空间为了大型项目开发,而引入的一种避免命名冲突的一种机制。比如说,在一个大型项目中,要用到多家软件开发商提供的类库。在事先没有约定的情况下,两套类库可能在存在同名的函数或是全局变量而产生冲突。项目越大,用到的类库越多,开发人员越多,这种冲突就会越明显。可看下面的例子:#include<iostream>#include...原创 2018-07-14 11:48:09 · 133 阅读 · 0 评论 -
C++ 封装 类
封装,可以达到,对外提供接口,屏蔽数据,对内开放数据。比如我们用struct封装的类,即知其接口,又可以直接访问其内部数据,这样却没有达到信息隐蔽的功效。而class则提供了这样的功能,屏蔽内部数据,对外开放接口。struct中所有行为和属性都是public的(默认)。C++中的class可以指定行为和属性的访问方式,默认为pirvate。各个具体如下:访问属性 属性 对象内部 ...原创 2018-07-14 13:54:21 · 1310 阅读 · 0 评论 -
C++ 构造器(Constructor)
定义构造器:1.与类名相同,无返回,被系统生成对象时自动调用,用于初始化2.可以有参数,构造器的重载,默认参数3.若未提供任何构造,系统默认生成一个无参空构造器。若提供,则不再生成默认构造器。class 类名{ 类名(形式参数) 构造体 }class A{ A(形参) { ...原创 2018-07-14 15:33:25 · 3303 阅读 · 0 评论 -
C++对于const重铸,在结构体中的const引用通过const_cast转换值
#include<iostream>using namespace std;int main(){ struct s1 { const int *a; }; int b = 13; s1 chen = {const_cast<int*>(&b)}; cout<<*(chen.a)&l...原创 2019-03-19 10:41:37 · 612 阅读 · 0 评论 -
C++整数转成二进制方法总结
经常遇到要用到二进制的情况,这里我就记录下1.逐次经典位操作(返回一个含有二进制数的vector)#include<iostream>using namespace std;#include<vector>vector<int> Transform(int n){ vector<int>m; for(int i...转载 2019-04-10 12:13:35 · 27692 阅读 · 1 评论 -
点的相关数据结构——距离、共线等方法C++总结
由于经常遇到数学上点的各种问题。所以还是需要个数据结构(轮子)来一直用,为此记录一下,顺便做个题常用函数总结1.——2D情况1.1 数据结构class Point2D{public: int x, y; Point2D(int a = 0, int b = 0):x(a),y(b){} };1.2 两点距离(注:float可以换成double,但还...原创 2019-04-10 15:10:14 · 672 阅读 · 0 评论 -
C++拷贝构造器(Copy contructor)
定义:由己存在的对象,创建新对象。也就是说新对象,不由构造器来构造,而是由拷贝构造器来完成。拷贝构造器的格式是固定的。class 类名{类名(const 类名 & another) 拷贝构造体}classA{A(const A & another) {}}规则:1系统提供默认的拷贝构造器。一经实现,不复存在。...转载 2018-07-16 21:32:37 · 304 阅读 · 0 评论