
C++
文章平均质量分 89
douzhq
这个作者很懒,什么都没留下…
展开
-
个人技术文章汇总
QGraphicsView框架。Windows程序设计。原创 2020-02-09 18:40:17 · 5079 阅读 · 0 评论 -
c++11学习笔记(8)- 可变参数宏、函数、模板
1. 可变参数宏可变参数的宏在C语言中就有定义,使用 …,在宏定义中表示可变参数;使用 VA_ARGS 替代宏定义中的可变参数。比如我们想要定义 printf() 函数为宏 PR,下面是一个简单的例子:// 宏定义PR为printf函数#ifndef PR#define PR(pStr, ...) \ printf(pStr, __VA_ARGS__);#endifint mai...原创 2019-10-03 18:50:58 · 1803 阅读 · 0 评论 -
内存池的简单实现
文章目录1. 内存单元2. 内存块3. 内存池当我们频繁的申请内存(new、malloc) 和 释放内存(delete、free) 时,会产生内存碎片,而且申请和释放内存也会增加时间的消耗。内存池就是为了解决该问题,提高效率产生的。这里使用分段分段连续的内存,来存储多次申请和释放的内存。内存单元: 定义的内存最小单元内存块: 一块连续的内存,可以存放多个内存单元内存池: 用链表...原创 2019-07-17 00:12:55 · 502 阅读 · 0 评论 -
C++中的new和delete
文章目录1. operator new 、placement new 和 operator delete2. new[] 和delete[]1. operator new 、placement new 和 operator delete我们首先来看一下下面的简单示例#include <iostream>class MTestClass{public: MTestCla...原创 2019-05-22 23:32:59 · 350 阅读 · 0 评论 -
STL学习笔记(2)- vector和deque
vector 和 deque 都是序列式容器,关于这两个容器的基本用法就不说了,这里简单说明一下这两个容器的其他问题。vector 是单端开口的容器,尾部插入和删除元素速度快;deque 是双端开口的容器可以头部插入也可以尾部插入,速度快。但是中间插入速度慢,遍历速度快。vector 是动态数组,在堆中分配内存,元素是连续存放的。可以动态扩容。vector 即使大小减少,内存也不会被释放...原创 2019-05-11 22:38:14 · 381 阅读 · 0 评论 -
STL学习笔记(4)- STL算法导论for_each和仿函数
STL提供了 for_each 函数,对容器某个范围内的提供统一的函数调用的函数。下面是一个 for_each 的基本用法示例,将数组 vector 中的每一个元素内容* 2使用 for_each 时,需要使用头文件 <algorithm>具体代码如下:#include <iostream>#include <algorithm>#include &...原创 2019-05-15 22:48:22 · 323 阅读 · 0 评论 -
STL学习笔记(1)- list的简易仿真
list的实际上是一个链表,本篇文章简单的实现一个list首先创建一个节点模板类:template <typename T>class MListNode{public: MListNode<T> *next = nullptr; MListNode<T> *prev = nullptr; T data;};接下来创建迭代器类,迭代器中包含...原创 2019-05-10 23:41:26 · 279 阅读 · 0 评论 -
STL学习笔记(5)- STL的函数适配器bind1st和bind2nd
文章目录1. bind1st2. bind2ndbind1st 是将一个二元函数的第一个参数绑定为固定值的函数(实质上是仿函数类)bind2nd 是将一个二元函数的第二个参数绑定为固定值的函数(实质上是仿函数类)他们再使用的时候都需要加上头文件<functional>1. bind1st下面是一个关于 bind1st 的简单示例:#include <iost...原创 2019-05-21 00:09:27 · 615 阅读 · 0 评论 -
c++11学习笔记(7)- 智能指针的简单实现
上一篇文章中简单介绍了只能指针的简单使用,文章链接如下:c++11学习笔记(6)- 智能指针本片文章简单介绍一下智能指针的实现文章目录1. auto_ptr的简单实现2. unique_ptr的简单实现3. shared_ptr的简单实现1. auto_ptr的简单实现代码如下:template<typename T>class MAutoPtr{public: ...原创 2019-05-09 23:05:00 · 294 阅读 · 0 评论 -
STL学习笔记(3)- STL容器和使用场景
STL的容器主要分为两类,一类是序列式容器,包括vector、deque、list等;一类是关联式容器,包括set、multiset、map、multimap。下面主要对容器进行一下说明容器vectordequelistsetmultisetmapmultimap经典内部结构内存连续的空间多个内存连续的空间双向链表二叉树二叉树二叉树二叉树元素...原创 2019-05-13 22:32:43 · 396 阅读 · 0 评论 -
c++11学习笔记(6)- 智能指针
文章目录1. unique_ptr2. shared_ptr3. weak_ptr智能指针在C++11以前就已经存在了,使用的是 auto_ptr 作为只能指针,不过 auto_ptr 有一个缺点,拷贝时返回一个左值,不能调用delete[]等,所以在C++11中被弃用了。C++11中使用 unique_ptr 、shared_ptr 、weak_ptr 等智能指针回收堆分配的对象。1. u...原创 2019-04-29 23:28:28 · 346 阅读 · 0 评论 -
c++11学习笔记(5)- 引用折叠和完美转发
C++通过引入一条所谓“引用折叠”的语言规则,并结合模板推导来完成完美转发的。首先看一个例子:template<typename T>void testFunc(T& r){ }当我们给函数传入引用时,如果我们对函数 testFunc 传入一个非引用类型的数据,那么形参中r的类型时什么呢?传入一个右值引用,形参r中的类型是什么呢?如果函数参数声明的类型是右值引用...原创 2019-04-24 22:34:48 · 2784 阅读 · 1 评论 -
C++中的虚析构
首先什么是虚析构,虚析构就是析构函数为虚函数。那么为什么要用虚析构呢,是为了delete基类指针指向派生类时防止子类得数据不会被释放造成内存泄露。我们看一下下面的例子:首先我们定义一个数据类,MyDataclass MyData{public: MyData(){ m_Data = new char[10]; } ~MyData() { delete[] m_Data;...原创 2019-04-20 15:39:05 · 9111 阅读 · 0 评论 -
c++11学习笔记(4)- 移动构造函数与移动语义
文章目录@[toc]1.移动构造函数2. std::move1.移动构造函数什么是移动构造函数呢?我们首先来看一个例子:#include <iostream>#include <stdlib.h>class Object{public: Object() { std::cout << "Object()" << std::en...原创 2019-04-23 23:54:38 · 740 阅读 · 0 评论 -
c++11学习笔记(3)- 左值、右值和右值引用
文章目录@[toc]1.左值和右值2.右值引用3.右值引用的使用1. 使用右值引用增长生命周期2. 右值引用接受的对象1.左值和右值什么是左值,什么又是右值呢?先看一个例子int a = b + c;这里的 a 就是左值, 而 b+c 就是右值。C++标准中没有明确的定义左值和右值,通常意义上我们对于左值和右值做出如下规定。可以取地址的、有名字的为 左值 。不能取地址的、没有 名...原创 2019-04-22 23:59:59 · 1155 阅读 · 0 评论 -
c++11学习笔记(2)- std::function
std::function 是一个 函数包装模板 ,用来存储、转移、调用目标函数,包括普通函数、类的成员函数、lambda表达式、仿函数等。如果std::function未包裹任何可调用的元素,则会抛出std::bad_function_call 异常。下面是一个关于std::function的使用的一个简单的示例首先我们定义几个函数:// 普通函数void printFunc(int...原创 2019-04-17 22:50:17 · 624 阅读 · 0 评论 -
C++中的虚表
C++中为了实现多态,使用的时虚表。首先我们看一个简单的例子,代码如下:#include <iostream>#include "stdlib.h"class BaseClass{public: BaseClass() {} ~BaseClass(){} virtual void runPrint(void) { std::cout << "Run...原创 2019-04-13 17:25:46 · 1613 阅读 · 2 评论 -
c++11学习笔记(1)-__func__预定义标识符
__func__预定义标识符__func__ 的基本功能是返回函数的名字。他的基本是使用可以查看下面的例子:void printHello(void){ std::cout &lt;&lt; __func__ &lt;&lt; std::endl;}void printWorld(void){ std::cout &lt;&lt; __func__ &原创 2019-03-17 10:57:00 · 2585 阅读 · 0 评论