C++
lfc2017
啦啦啦啦啦啦啦
展开
-
QT编译错误:undefined reference to `vtable for” ClassName
1. 右键项目, 点击 “Clean”2. 右键项目,点击 “Run qmake”3. 点击QT Create最上面的Build,执行“Run”执行完上述步骤后编译通过了。看别人的文章也有可能其他问题导致这个编译错误,如果这个办法没有用的话,可以参考别人的解决办法。...原创 2021-10-21 18:17:16 · 272 阅读 · 0 评论 -
STL之 heap
heap 并不归属于 STL 容器组件,它是个幕后英雄,扮演 priority queue的推手。顾名思义,priority queue 允许使用者以任何次序将任何元素推入 容器内,但取出时一定是从优先权最高(也就是数值最高)之元素开始取。binary max heap 正是具有这样的特性,适合做为 priority queue 的底层机制。heap是一个完全二叉树。这有一个极大好处:我们可 ...原创 2019-03-27 10:54:23 · 141 阅读 · 0 评论 -
STL值priority_queue
顾名思义,priority_queue 是一个拥有权值观念的 queue,它允许加入新元素、 移除旧元素,审视元素值等功能。由于这是一个 queue,所以只允许在底端加入 元素,并从顶端取出元素,除此之外别无其它存取元素的途径。 priority_queue 带有权值观念,其内的元素并非依照被推入的次序排列,而是 自动依照元素的权值排列(通常权值以实值表示)。权值最高者,排在最前面。预设情况下...原创 2019-03-27 11:32:29 · 240 阅读 · 0 评论 -
c++ 知识点总结:
# include<iostream.h>void f(){ static int i = 15; i++; cout<< "i=" << i << endl;}void main(){ for(int k = 0; k < 2; k++) f();}上面这段代码输出结果为 ...原创 2019-04-05 01:02:48 · 255 阅读 · 0 评论 -
STL 之 vector
众所周知,常用的数据结构不外乎 array(数组)、list(串行)、tree(树)、stack (堆栈)、queue(队列)、hash table(杂凑表)、set(集合)、map(映像表)… 等等。根据「资料在容器㆗的排列」特性,这些数据结构分为序列式(sequence) 和关系型(associative)两种。vector 的数据安排以及操作方式,与 array 非常像似。两者的唯㆒...原创 2019-03-27 16:42:28 · 103 阅读 · 0 评论 -
STL之 list 和 slist
相较于 vector 的连续线性空间,list 就显得复杂许多,它的好处是每次安插 或删除㆒个元素,就配置或释放㆒个元素空间。因此,list 对于空间的运用有绝 对的精准,㆒点也不浪费。而且,对于任何位置的元素安插或元素移除,list 永 远是常数时间。 ...原创 2019-03-27 17:09:05 · 471 阅读 · 0 评论 -
STL 之 deque
vector 是单向开口的连续线性空间,deque 则是㆒种双向开口的连续线性空间。 所谓双向开口,意思是可以在头尾两端分别做元素的安插和删除动作,如图 4-9。 vector 当然也可以在头尾两端做动作(从技术观点),但是其头部动作效率奇差, 无法被接受。 deque 和 vector 的最大差异,㆒在于 deque 允许于常数时间内对...原创 2019-03-27 17:18:38 · 86 阅读 · 0 评论 -
STL 之红黑树
R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。[注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点...原创 2019-03-28 17:17:49 · 1111 阅读 · 0 评论 -
Effective C++ Logic constness 和 Bitwise constness
什么是 Logic constness有以下类 BigArray,其成员 vector<int> v; 是一个数组数据结构,为了让外部可以访问该数组,此类提供了一个 getItem 接口,除此之外,为了计算外部访问数组的次数,该类还设置了一个计数器 accessCounter ,可以看到用户每次调用 getItem 接口,accessCounter 就会自增,很明显,这里的成员 v...原创 2019-04-13 17:22:52 · 576 阅读 · 0 评论 -
Effective C++ 关键字explicit
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString // 没有使用explicit关键...原创 2019-04-13 18:48:25 · 100 阅读 · 0 评论 -
Effective c++ 阅读笔记
第一节 让自己习惯 C++条款 2:尽量以const, enum, inline替换#define对于单纯常量,最好以const对象或enums 替换 # define 对于形似函数的宏,最好改用inline函数替换# define条款 3: 尽可能使用const将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于作用域内的对象、函数参数。参数返回类型、...原创 2019-04-13 19:45:34 · 144 阅读 · 0 评论 -
const_cast / dynamic_cast / static_cast / reinterpret_cast
一 const_castconst_cast是一个强制类型转换操作符。《C++ Primer》中是这样描述它的:1.将转换掉表达式的const性质。2.只有使用const_cast才能将const性质性质转化掉。试图使用其他三种形式的强制转换都会导致编译时的错误。(添加const还可以用其他转换符,如static_const)3.除了添加const或删除const特性,使用cons...原创 2019-05-06 19:35:12 · 201 阅读 · 0 评论 -
将文件间的编译依存关系降至最低的例子
在说这一条款之前,先要了解一下C/C++的编译知识,假设有三个类ComplexClass, SimpleClass1和SimpleClass2,采用头文件将类的声明与类的实现分开,这样共对应于6个文件,分别是ComplexClass.h,ComplexClass.cpp,SimpleClass1.h,SimpleClass1.cpp,SimpleClass2.h,SimpleClass2.cpp。...转载 2019-05-07 11:09:20 · 127 阅读 · 0 评论 -
STL之 stack和queue
1. stack以某种既有容器做为底部结构,将其接口改变,使符合「先进后出」的特性,形 成一个 stack,是很容易做到的。deque 是双向开口的数据结构,若以 deque 为 底部结构并封闭其头端开口,便轻而易举㆞形成了㆒个 stack。因此,SGI STL 便 以 deque 做为预设情况下的 stack 底部结构。由于 stack 系以底部容器完成其所有工作,而具有这种「修改某物接口,...原创 2019-03-27 09:58:06 · 167 阅读 · 0 评论 -
c++ 位运算
1. (data + 8 - 1) & (8 - 1) 把 data上调至8 的倍数,同理,也可以改成16,32...的倍数。int round_up(int n){ int temp2 = (n + 8 - 1); int temp = ~(8 - 1); cout << (bitset<num>)temp2 << endl;...原创 2019-03-16 21:35:37 · 268 阅读 · 0 评论 -
C++ 多态及实现
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚...转载 2019-03-05 10:09:49 · 125 阅读 · 0 评论 -
C++const 关键字小结
https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html转载 2019-03-02 12:23:05 · 145 阅读 · 0 评论 -
C++ 中static关键字的作用
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include <io...转载 2019-03-06 10:09:46 · 212 阅读 · 0 评论 -
在c++程序中调用被C编译器编译后的函数,为什么要使用extern “C”
c/c++函数调用约定:c/c++函数调用约定一、原题:二、详细说明:现在,在一个工程中;有一个test.c文件;一个test1.cpp文件;//test.c#include<stdio.h>int Add(int a,int b){ return a+b;}1234567(1)使用extern int Add(int,int);声...转载 2019-03-06 10:16:47 · 207 阅读 · 0 评论 -
指针,引用的区别
一指针指针传递参数本质上是值传递的方式,它传递的是一个地址。在值传递过程中,被调函数的形式参数作为被调用函数的局部变量处理,即在栈中开辟内存空间来存放主调函数传进来的实参的值,从而成为实参的一个副本。值传递的特点是被调用函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量,这里是在说实...原创 2019-03-04 10:19:07 · 130 阅读 · 0 评论 -
c++中有了malloc/free,为什么还需要new/delete?
一:malloc/free是c/c++中的标准库函数,new/delete是c++中的运算符。它们都用于申请动态内存和释放内存。二:对于非内部数据对象(eg:类对象),只用malloc/free无法满足动态对象的要求。这是因为对象在创建的同时需要自动执行构造函数,对象在消亡之前要自动执行析构函数,而由于malloc/free是库函数而不是运算符,不在编译器的控制权限内,也就不能自动执行构造函数...转载 2019-03-04 11:02:53 · 368 阅读 · 0 评论 -
C++:堆和栈的区别
(1)管理方式:堆中资源由程序员控制(通过malloc/free、new/delete,容易产生memory leak),栈资源由编译器自动管理。(2)系统响应:对于堆,系统有一个记录空闲内存地址的链表,当系统收到程序申请时,遍历该链表,寻找第一个大于所申请空间的空间的堆结点,删除空闲结点链表中的该结点,并将该结点空间分配给程序(大多数系统会在这块内存空间首地址记录本次分配的大小,这样dele...转载 2019-03-04 12:13:35 · 70 阅读 · 0 评论 -
c++ 六大组件与功能
STL提供六大组件,彼此可以嵌套使用。1.容器:各种数据结构,比如vector,list,set,map,deque,用来存放数据。从实作的角度看,STL 容器是一种 class template。就体积而言,这一部份很像冰山在海面下的比率。2.算法:各种算法如sort,search,copy,erase。从实作的角度看,STL 算法是一种 function template。3.迭代...原创 2019-03-16 14:24:38 · 1915 阅读 · 0 评论 -
size_t ptrdiff_t
两个指针相减的结果的类型为ptrdiff_t,它是一种有符号整数类型。减法运算的值为两个指针在内存中的距离(以数组元素的长度为单位,而非字节),因为减法运算的结果将除以数组元素类型的长度。所以该结果与数组中存储的元素的类型无关。类似的还有如下类型:(点击这里)size_t是unsigned类型,用于指明数组长度或下标,它必须是一个正数,std::size_t.设计size_t就是为了...原创 2019-03-16 15:03:10 · 146 阅读 · 0 评论 -
关于STL源码的set_new_handler
问题背景 在阅读侯杰的《STL源码剖析》的时候,在书中的p45页遇到一段代码,书中并没有给予详细的解释,查阅资料发现网上的解释并不是那么尽如人意,在查阅了《effective C++》这本书之后,总结写出了这篇博客。书中的“问题代码”:template<class T>inline T* _allocate(ptrdiff_t size,T*){ set_new_...原创 2019-03-16 15:09:40 · 125 阅读 · 0 评论 -
c++中的 trivial destructor
如果用户不定义析构函数,而是用系统自带的,则说明,析构函数基本没有什么用(但默认会被调用)我们称之为trivial destructor。反之,如果特定定义了析构函数,则说明需要在释放空间之前做一些事情,则这个析构函数称为non-trivial destructor。如果某个类中只有基本类型的话是没有必要调用析构函数的,delelte p的时候基本不会产生析构代码。 在C++的类中如果只有...原创 2019-03-16 16:04:12 · 204 阅读 · 0 评论 -
STL学习笔记之union obj
最近看STL源码剖析时遇到了一个有趣union的用法,简单谈谈自己的看法STL第二级空间配置器中,自由链表的节点结构如下:union obj{union obj * free_list_link;char client_data[1];};书上给的解释是这样的:“上述obj所用用的是union,由于union之故,从其第一字段观之,obj可被视为—个指针,指向相同形式的另一个obj。从...转载 2019-03-16 20:10:03 · 506 阅读 · 1 评论 -
编写类String 的构造函数,析构函数,拷贝构造函数和赋值函数
考点:构造函数、析构函数和赋值函数的编写方法出现频率:☆☆☆☆☆已知类String的原型为: class String { public: String(const char *str = NULL); //普通构造函数 String(const String &ot...转载 2019-03-05 09:34:35 · 440 阅读 · 0 评论