c++
文章平均质量分 90
earlene_wyl
这个作者很懒,什么都没留下…
展开
-
十进制 -》 《-二进制
十进制->二进制 正数:正常 负数: 补码 (各位取反,然后+1)二进制->十进制 正数:正常 负数:先-1,然后各位取反 (连着符号位 都取反,因为正数必带符号位0)符号位: 最高位 正数0 负数 1比如int 32位,最高位是符号位,正数表示0,负数表示1,正数最大能表示的范围 【0,2^31-1】 而负数【-2^31,-1】...原创 2019-07-04 16:03:41 · 124 阅读 · 0 评论 -
容器的size()!!!
容器的size()返回的是size_t而size_t在32位的机子上是unsignedint,在64位上是unsignedlong。总而言之都是unsigned,而一个算术表达式既有无符号数又有有符号数(比如int),就会把有符号数变为无符号数再进行操作,所以假如有以下情况发生一个unsigned - 一个int =负数 (实际值是数值总数+那个负数)比如vector<...原创 2019-06-22 22:12:12 · 1170 阅读 · 0 评论 -
“指针+1”的理解
总结:指针加减数字 :int *p1;int *p2 = p1+1 (实质是p1+1*sizeof(int))指针减指针,得到的结果是两指针减的距离除以sizeof(声明指针的类型),然后取整,特殊的是void * 它的sizeof是11、一个32位的机器,该机器的指针是多少位的?指针是多少位只要看地址总线的位数就行了,80386以后的机子都是32的地址总线,...原创 2019-05-12 19:29:16 · 6751 阅读 · 3 评论 -
delete和delete[ ]的区别
delete一共干两件事:1)释放内存2)执行析构函数就释放内存来说,编译器是根据你这个指针的地址来知道这块内存的大小的,因为你申请的时候,内存管理器记录了这个地址开始的申请的内存的大小。所以不管是啥,内置类型(int),自定义类型还是一个xx数组,delete和delete[ ]都释放了内存(把内存标记为未使用)。但是对第二件事——执行析构函数而言,两者是不同的,delete只...原创 2019-05-12 14:58:03 · 911 阅读 · 0 评论 -
priority_queue重载小于运算符的问题
template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;priority_queue的声明,可以看到底层默认是用vector实现的,并且第三个参数比较器默认是le...原创 2019-05-15 10:00:11 · 1553 阅读 · 3 评论 -
c++获取数组长度
方法一:用宏函数 #define#define foo(arr) sizeof(arr)/sizeof(arr[0])int main(){ int arr[4] = {1,2,3,4}; cout<<foo(arr)<<endl;}方法二:用函数模板int getArrLen1(int *a ){ return sizeof(a)...原创 2019-05-14 22:35:51 · 18976 阅读 · 1 评论 -
C++ lambda表达式与函数对象 详解
C++ lambda表达式与函数对象lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读。但是从本质上来讲,lambda表达式只是一种语法糖,因为所有其能完成的工作都可以用其它稍微复杂的代码来实现。但是它简便的语法却给C++带来了深远的影响。如果从广义上说,lamdba表达式产生的是函数对象。在类中,可以...转载 2019-05-04 20:03:47 · 374 阅读 · 0 评论 -
c++11 pod类型(了解)
转载自:https://www.cnblogs.com/zzyoucan/p/3918614.html啥是POD类型?POD全称Plain Old Data。通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。平凡的定义1.有平凡的构造函数2.有平凡的拷贝构造函数3.有平凡的移动构造函数4.有平凡的拷贝赋值运算符5.有平凡的移动赋值运算符6....转载 2019-04-16 13:39:06 · 320 阅读 · 0 评论 -
深度探索cpp对象模型(1)(2)
第一章 关于对象指针其实存的就是一个地址,不管啥类型的指针大小都是一样的,对不同类型的指针,怎么知道要读多少字节,这是编译器干的事情,指针类型告诉编译器,我到底要读多少字节。32位,指针大小4个字节,64位8个字节由此引申开来,不能用void * 操作对象,针对void *指针的static_cast,其实是一种编译器指令,并没有改变一个指针所含的地址第二章 构造函数语意学...原创 2019-05-18 11:46:47 · 305 阅读 · 0 评论 -
C++ 右结合律与左结合律详解
运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式。举个例子,假设~是一个运算符,又有表达式a~b~c,如果~是左结合的,那么该表达式被解析为(a~b)~c,如果~是右结合的,那么该表达式将被解析为a~(b~c)。比如上表中三目运算符?:是从右向左结合的那么下面的表达式a > b ? b...转载 2019-03-28 23:58:31 · 2083 阅读 · 0 评论 -
c++-数组,2维数组
一.一维数组1.保存在栈中的一维数组也就是局部变量的一维数组,在编译的时候其维度必须是已知的,因此维度必须是一个常量表达式。int a【4】;okinta=4;intb【a】wrong!2.保存在堆中的一维数组也就是用new搞出来的,维度可以是一个变量inta=4;int *b =newint 【a】 ok!二.二维数组(更多维同)inta【...原创 2019-07-15 01:36:58 · 1052 阅读 · 0 评论 -
回调函数
在C/C++里面,函数的概念很好理解,就是把某个任务独立出来,封装在一起,然后给它取个名字,它可以有参数和返回值。那么,回调函数是个什么鬼呢?它和函数到底有何异同?既然已经有了函数,为啥还非要生出个回调函数来?想必,小伙伴们在刚碰到这个概念的时候,都会被这些问题困扰。网上搜一搜,有很多相关的材料,但是未必透彻。我觉得要真正理解一个概念,必须要先理解它存在的意义,也就是它为什么要存在,它能带来什么方...原创 2019-07-20 15:24:56 · 137 阅读 · 0 评论 -
多重继承
多重继承优点: 简单,清晰,更有利于复用。多重继承缺点:1)可能会产生菱形继承,存在二义性问题。菱形继承假如类B是从A1和A2两个类多重继承而来的,而A1和A2又有个共同的基类Base,那这样B类就包含了两个Base成员,这样就不但增加了存储空间,同时也引入了二义性,我调用Base里面的一个普通成员函数,我的this指针到底应该传哪一个Base呢?这...原创 2019-09-20 19:50:01 · 659 阅读 · 0 评论 -
C++11的特性(构造函数的初始化列表,智能指针,lambda)
C++11的特性(构造函数的初始化列表,智能指针,lambda)auto nullptr 关键字auto关键字:编译器可以根据初始值自动推导出类型。不过如果你希望推导出的类型是一个顶层const或者引用的话,需要显式指定。(const auto , auto& )nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定...原创 2019-09-20 18:09:24 · 1244 阅读 · 0 评论 -
面向对象的3个基本特征
面向对象的三个基本特征是:封装、继承、多态1. 封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。隐藏具体的内部实现细节,仅向外部提供简单的接口优点:减少耦合:可以独立地开发、测试、优化、使用、理解和修改 减轻维护的负担:可以更容易被程序员理解,并且在调试的时候可以不影响其他模块2.继承继承就是在父类的基础上,作出扩展,定义一个子类,而子类跟父类的关...原创 2019-09-19 15:07:51 · 5661 阅读 · 0 评论 -
C++ 并发问题
1.pthread_cond_wait的虚假唤醒什么是虚假唤醒?简单说就是wait这个函数返回了,但是它等的那个条件并不满足。为什么会这样? 有两种原因这个条件从来就没有满足过,wiat函数的返回不是因为别的线程调用signal或者broadcast把你唤醒,而是因为wait函数被信号中断。(虚假唤醒的一个可能性是条件变量的等待被信号中断。) pthread 的条件变量等...原创 2019-10-12 00:00:06 · 282 阅读 · 0 评论 -
多态和动态绑定和RTTI(运行期类型识别)和RAII(以对象管理资源)
1.多态和动态绑定:动态绑定:在C++中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定。多态:多态性可以简单地概括为“一个接口,多种方法”多态目的:为了接口重用。对于动态多态来说就是不论传递过来的究竟是那个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法。多态类型: a、编译时多态性:通过模板或者重载函数实现(子类实...原创 2019-08-29 00:31:15 · 578 阅读 · 0 评论 -
c++基础问题
目录指针与引用a)区别b)什么时候用指针?什么时候用引用?c)野指针,空悬指针智能指针C++11的特性(构造函数的初始化列表,智能指针,lambda)析构函数能否抛出异常c与c++面向对象的三个基本特征是:封装、继承、多态多态、 RTTI、RAII析构函数为什么要虚函数?构造函数为什么不能是虚函数?析构和构造函数体内能调用虚函数吗?C...原创 2019-09-20 00:52:26 · 586 阅读 · 0 评论 -
手写memcpy,strcpy,memset,strcat,strcmp
目录1)memcpy2)strcpy3) memset4)strcat5)strcmp1)memcpy函数声明:void *memcpy(void *dst, const void *src, size_t n); ////dst:目的地址, src:源地址 n:要拷贝的字节数但是标准memcpy(),对于地址重叠的情况,该函数的行为是未定义的。//If ...原创 2019-08-26 23:19:39 · 1095 阅读 · 0 评论 -
单例模式
目录单例模式:1)定义2)实现方法:3)优点和应用场景:c++实现懒汉模式:1)muduo C++网络库的线程安全单例模式:使用方法:2)单线程版:3)各种多线程版:a)上锁(线程安全但效率不高)b)双检查锁(DCL)(会导致未初始化的内存访问)c)使用内存栅栏(线程安全)饿汉模式:单例模式:1)定义简单定义:保证这个类在程序里面只...原创 2019-08-26 19:07:46 · 168 阅读 · 0 评论 -
智能指针
目录C++里面的3个智能指针:为什么要使用智能指针:shared_ptr是怎么实现的?什么时候改变引用计数?shared_ptr循环引用问题:所以改用weak_ptr(好好看看showfriend这个函数,看怎么用weak_ptr)shared_ptr基本使用代码:shared_ptr基本实现代码:参考:https://www.cnblogs.com/xie...原创 2019-08-25 01:38:45 · 290 阅读 · 0 评论 -
类模板(class template)友元(friend) 的 全部六种形式 及 代码 (转载)
http://blog.csdn.net/caroline_wendy/article/details/16916441类模板(class template)友元(friend) 的 全部六种形式 及 代码类模板(class template)的友元(friend)和普通类的友元, 有很多区别,主要原因是类模板包含模板参数(template parameter), 就会导致友元和类模板...原创 2019-08-23 16:08:27 · 1162 阅读 · 0 评论 -
拷贝构造函数与NRV优化
《深度探索C++对象模型》第二章67页有:这个程序的第一个版本不能实施NRV优化,因为test class 缺少一个copy constructor.也就是缺少拷贝构造函数所以不能NRV优化。NRV优化和拷贝构造函数是有关系的,只有定义了拷贝构造函数才会开启NRV优化,但现代编译器NRV优化的开启一般都与拷贝构造函数没有关系,早期的 cfront需要一个开关来决定是否应该对代码实行...转载 2019-04-11 15:07:55 · 282 阅读 · 0 评论 -
C/C++中auto、static、register、extern关键字区别小结
1. 说明 以上四种都是变量存储说明符,因为C/C++语言在变量定义时候的完整语法是: [存储说明符] [数据类型] [变量名称] [=初始化]; 因为大多我们声明的变量都是auto变量,而存储说明符默认即auto关键字,所以大多情况下我们省略了auto关键字。例如: int nNum = 5; 实际定义的完整变量语句为: auto int nNum =5...转载 2019-04-11 14:56:02 · 324 阅读 · 0 评论 -
enum类型
http://www.runoob.com/w3cnote/cpp-enum-intro.htmlhttps://www.cnblogs.com/chengkeke/p/5417368.htmlhttps://www.baidu.com/link?url=bOkh3-M44VFGAMWSXkx1amN5duHlT6k7OdzcbTPC6JkHaoQYIZg2pn_XQC0N3UJAnMz3...转载 2019-04-07 22:26:55 · 107 阅读 · 0 评论 -
友元
友元是一种允许非 A类成员函数 访问 A类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。友元函数:友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们希望类的用户能够调用某个友元函数,那么我们就必须在友元声明之外再专门对函数进行一次声明。 (但是一些编译器允许在尚无友元函数的初始声明的情况下就调用它)就比如说下面 VS...原创 2019-01-01 16:55:44 · 156 阅读 · 1 评论 -
static和头文件,源文件放什么
目录头文件or源文件1、局部静态变量2、全局静态变量/普通的全局静态函数3、静态数据成员、成员函数(面向对象)头文件or源文件a)头文件应该放: 1)普通的全局函数声明 2)普通的全局变量声明 (必须是 extern int i这种方式//用来声明在另一...原创 2019-01-07 01:59:33 · 4177 阅读 · 0 评论 -
在VS中向命令行添加参数的方法
在VS中向命令行添加参数,即向main()函数传递参数的方法:右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入要添加的参数,各参数间用空格分离。例如:"-hide_banner" "Z:/media/subtitle/internal/divx/496x496.divx"则传递给main函数的argc为3,其中argv[0]为程...转载 2018-12-11 21:30:52 · 807 阅读 · 0 评论 -
vector中size()和capacity()取值
vector v;此时没有初始化,所以size()和capacity()都是0;cout<<v.size()<<endl<<v.capacity()<<endl;v.push_back(1);cout<<v.size()<<endl<<v.capacity()<<endl;/转载 2018-12-06 17:40:18 · 485 阅读 · 1 评论 -
C++中explicit的用法
C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生,声明为explicit的构造函数不能在隐式转换中使用。C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造;2 是个默认且隐含的类型转换操作符。所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型...转载 2018-12-05 21:41:08 · 167 阅读 · 0 评论 -
程序的编译链接过程
http://www.cnblogs.com/kekec/p/3238741.html从源文件Hello.cpp编译链接成Hello.exe,粗略的分 可以分为 编译(compile)和链接 (link)1.编译,由编译器对你写的代码进行词法和句法分析,发现并报告错误,有错时编译不能通过。如若无错,则生成中间代码,扩展名为obj (object code) 此时它便是二进...原创 2018-11-22 16:44:40 · 559 阅读 · 0 评论 -
C风格字符串和C++string对象的相互转化
C风格的字符串很容易转化成C++风格的字符串,反过来却可能引起语法错误。要注意用字符数组表示c风格字符串的时候,最后一位必须是 '\0'这也是为什么设置网络编程的时候,缓存区char buf[MAX] ,要用memset(buf,‘\0’,MAX) ,而read(fd,buf,MAX-1)。(printf和cout也只能正常输出 \0结尾的字符数组,否则不知道到哪停止。)一、C风格的字符...原创 2018-11-13 19:02:33 · 842 阅读 · 1 评论 -
c++中dll的编写和调用
1. 什么是dllDLL(Dynamic Link Library)即动态链接库,DLL文件与EXE文件一样也是可执行文件,但是DLL也被称之为库,因为里面封装了各种类啊,函数啊之类的东西,就像是一个库一样,存储着很多东西,主要是用来调用的。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。当程序需要调用DLL所定义的功能时,...原创 2018-11-07 22:14:45 · 676 阅读 · 0 评论 -
初始化 总结
先上总结:1. 列表初始化 2. 拷贝初始化 使用等号3.直接初始化 (使用括号,不使用等号 string("abc"),就是显式地调用相应的构造函数)4.默认初始化 5.值初始化 vector<int> ve(10) new int();6.类成员初始化 类内初始值只能使用拷贝初始化和列表初始化(不能直接初始化) 参考...原创 2019-01-07 00:12:19 · 199 阅读 · 0 评论 -
重载箭头操作符
箭头操作符必须是类的成员形式: string * operator->() const {...}重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。point->mem 执行过程:(1)如果 point-> (point的重载箭头运算符) 返回类型是指针b,则内置箭头操作符可用于该指针,编译器对该指针解引用...原创 2019-01-18 21:41:56 · 348 阅读 · 0 评论 -
c++头文件的使用和多个文件中如何共用一个全局变量
c++ 头文件的使用:https://blog.csdn.net/weixin_42018112/article/details/82357002头文件只是用来声明的,不参与编译,#include “1.h” 只是把1.h里的代码给复制到这个源文件里来,建议还是好好看看上面这个明确几个点:1)不管变量还是函数先声明 或者直接定义才能使用,声明能声明n次,同一个作用域里面 定义只能定义...原创 2019-03-27 21:57:01 · 16309 阅读 · 2 评论 -
handle class和interface class
降低文件间的依存关系:第一种方法: handle class把一个类变为一个接口类和一个实现类 实现类就是原来的这个类,接口类就是原来这个类的接口函数(public)和 一个private的智能指针对象(一般为shared_ptr)指向实现类,接口类里面需要用到的类,我们提供给它的都是类的前向声明,所以为了严格执行这样的准则,我们把每一个类(包括接口类和实现类)都提供两个头文件,一个是类的声明 ...原创 2019-04-03 21:59:11 · 1319 阅读 · 0 评论 -
最小堆的C++实现
template<typename T>class MinPQ {public: MinPQ(int _cap); ~MinPQ();public: void insert(T val); void deletTop(); T getTop(); int size; //数组长度为size,最大下标为size-1 inline int getCapaci...原创 2019-03-02 03:18:51 · 814 阅读 · 0 评论 -
c++,类的数据成员有数组,且动态调整数组大小
当想要一个自定义类的数据成员有数组时,不是用 ,比如 int A[50]; 这样只能指定大小而是在数据成员中 用T *heap (指向数组首元素) int capacity (表示数组的容量)然后再构造类的时候,用一个heap = new T[_cap]同时别忘了 析构的时候 delete[] heap然后resize呢, 当插入的时候 检查size == capacity 就表...原创 2019-03-02 03:17:06 · 7924 阅读 · 0 评论 -
struct和typedef struct
其实就是一个struct类型变量在c和c++中声明的区别typedef struct Student { int a;}Stu;这段代码用在c中,这就是为 struct Student 设置了一个别名Stu,当声明变量的时候,就可以直接用 Stu tmp;假如在c中,没有这个typedefstruct Student { int a;};那声明变量必须用 str...原创 2019-03-01 22:03:21 · 139 阅读 · 0 评论