C++
Maricat4
这个作者很懒,什么都没留下…
展开
-
C++—— =delete和=default
C++—— =delete和=default 函数定义中末尾会带这两个表达式,这分别表示deleted function(弃置函数)和default function(默认函数)。其中=default仅对特殊成员函数与比较运算符函数 (C++20 起)允许。 特殊成员函数:默认构造函数复制构造函数移动构造函数 (C++11 起)复制赋值运算符移动赋值运算符 (C++11 起)析构函数 比较运算符函数:==、!=、<、<=、> 和 >=。(形如,ope原创 2020-07-16 08:12:52 · 479 阅读 · 0 评论 -
STL算法与数据结构---堆有关操作以及优先队列
STL算法与数据结构—堆有关操作以及优先队列本文将STL中的堆有关算法,做了些整理,以及扒出了它的源代码(去除了许多不必要的版本控制代码),并简单的注释了他们的大概运行过程。除示例代码以外,其余代码,均可以在GNU7.2.0中找到。堆操作汇总Heap operations,Defined in header <algorithm>is_heap(C++11)checks if the given range is a max heap (function templa原创 2020-05-27 15:14:58 · 344 阅读 · 0 评论 -
C/C++中基本的内存管理工具
C/C++中基本的内存管理工具new操作符以及相应的操作符函数new/delete,new[]/delete[] 对于new/delete,new[]/delete[],他们均为C++的运算符。他们的使用:string *sp = new string;//单个对象string *arr = new string[10];//10个对象delete sp;delete[] ar...原创 2020-04-18 20:23:53 · 366 阅读 · 0 评论 -
lambda表达式
lambda表达式lambda表达式的定义 对于可调用的解释:对于一个对象或一个表达式,如果可以对其使用调用运算符(调用运算符为()),则称它为可调用的。即,如果e是一个可调用的表达式,则我们可以编写代码e(args),其中args是一个逗号分隔的一个或多个参数的列表。 一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。与...原创 2020-03-10 23:51:25 · 347 阅读 · 0 评论 -
STL-迭代器中的traits
STL-迭代器中的traits STL中算法通过迭代器访问容器时,有时不仅仅需要知道元素是什么,还想用到元素的相应类型(声明一个变量之类)。STL中利用traits编程技巧来实现。它通过在每一种迭代器中声明了类型名。再通过iterator_traits来萃取类型。最终通过iterator_traits来获取类型。 为什么要通过iterator_traits来获取类型?这是因为,原生指针...原创 2020-02-22 13:14:57 · 131 阅读 · 0 评论 -
unordered_map&&unordered_set
unordered_map&&unordered_set底层实现 在STL中,C++11引入了unordered_map、unordered_set、unordered_multimap、unordered_multimap。尽管不是名字不是哈希表,但是底层仍然是。相比于map等,这个查找的平均时间更加快。看看它的底层实现(l来自《STL源码剖析》)://以下是基于gnu...原创 2020-02-20 14:51:22 · 168 阅读 · 0 评论 -
Map&&Set
STL- Map&&SetRB_Tree 非公开,这是map,set的底层支撑。它在STL中的实现: struct _Rb_tree_node_base { typedef _Rb_tree_node_base* _Base_ptr;//指向树节点的指针 typedef const _Rb_tree_node_base* _Const_Base_ptr...原创 2020-02-19 10:00:33 · 154 阅读 · 1 评论 -
STL-使用红黑树作为底层的原因简单解释
STL-使用红黑树作为底层的原因简单解释 在C++标准模板库中,map\set\mutimap\mutiset均是以红黑树作为底层来实现的。为什么要以红黑树来实现这些容器呢?二叉搜索树 二叉搜索树(也叫二叉排序树、二叉查找树)。二叉搜索树的定义较为简单。二叉搜索树就是根节点元素与左右子树所有元素的比较关系顺序。具体如大小关系,二叉搜索树就是根节点元素大于左子树的所有元素,小于右子树的...原创 2020-02-18 09:02:42 · 507 阅读 · 0 评论 -
list
list list,是用环状双向链表实现的。具体的的内存结构如下图: 其中需要解释的地方:1.end()指向的是一空白节点,用以实现STL前闭后开区间。2.前闭后开区间:在STL迭代器中,区间里要访问的元素一般采用[iterator1,iterator2)的表示方法。 一个list类中的数据成员是怎么样的呢?如下(g++,7.2.0)list_node *next;list...原创 2020-02-11 22:05:19 · 249 阅读 · 0 评论 -
deque
deque文档deque,她的意思为双端队列(double-ended queue)。逻辑上看,deque和vector都是连续空间。相比于vector只能从尾部增长元素,而deque可在双侧增加元素。但是从存储结构上,deque并非是连续空间存储的。它是分段连续的。对于vector存储(申请的内存)的增长,可以描述为三个步骤1.申请内存2.搬移元素3释放原先的使用的内存。而由于deque其特...原创 2020-02-09 11:38:35 · 978 阅读 · 0 评论 -
vector
vector使用 对于vector,它的存储结构和数组一样,连续空间。对于vector类型,它的数据成员有三个:iterator start;iterator finish;iterator end_of_storage; 其增长方式是两倍增长。由于存储空间连续,vector的迭代器本质上仍然是类型的指针。明白这点,以上三个数据成员就非常好理解。start,finsh分别表示正...原创 2020-02-08 09:25:21 · 274 阅读 · 0 评论 -
右值引用与移动构造函数
右值引用与移动构造函数文章目录右值引用与移动构造函数左值(lvalue)、右值(rvalue)、xvalue、prvalue、glvalue定义一些问题左值引用与右值引用测试移动构造函数、移动赋值Reference左值(lvalue)、右值(rvalue)、xvalue、prvalue、glvalue定义c++primer 这两个名词是从C语言继承过来的,原本是为了帮...原创 2020-01-12 15:03:19 · 623 阅读 · 0 评论 -
STL_string的使用
string的使用stringstring相当于basic_string,其中basic_string为字符串模板类,该模板提供了许多字符串类所需的成员以及方法,其中T为单个字符所属的类型。basic_string没有虚函数,这点和其他标准库类型一致,当需要设计更复杂的文字处理类时,可以用它加以实现。1.string的构造与析构-constructor and destructordefa...原创 2020-01-09 19:06:32 · 144 阅读 · 0 评论 -
关于char * 的初始化
char *的初始化问题描述:尝试STL中的string::copy函数时,引发了一个segment fault。如下#include <iostream>using namespace std;//显示变量名及其值#define showVar(x) showV(#x,x)template<typename T1,typename T2>inline voi...原创 2020-01-09 16:37:55 · 9201 阅读 · 0 评论 -
VSCode_C++_输出窗口中文乱码解决方案
VSCode_C++_输出窗口中文乱码C++常常要用到控制台输出一些调试信息,**但是由于代码本身的编码格式与控制台所用的编码格式不一致,就会导致控制台输出乱码。**基于此,可以有两种解决方案:更改代码文件的本身编码格式(UTF-8,GB2312等)最简单有效(建议采用这种方式)VSCode 底部状态框内有当前文件编码格式,将其修改为GB2312即可更改控制台的编码格式控制台默认的编码...原创 2020-01-07 11:10:38 · 7746 阅读 · 3 评论