![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++学习
文章平均质量分 74
xuwqiang1994
这个作者很懒,什么都没留下…
展开
-
c++的深拷贝和浅拷贝
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2017-01-06 12:21:38 · 181 阅读 · 0 评论 -
SGI STL容器vector源码解析
vector是个序列容器,被称为动态数组,类似于C/C++中的数组,但是其空间能够动态变化。 使用只需要包含vector/vector.h头文件,但是SGI将其实现在stl_vector.h头文件。 实现如下:首先定义了vector基类_Vector_base,主要用于两个目的,首先,_Vector_base的构造器和析构器只分配空间单不初始化,这使得异常安全更容易;其次,封装了SGI风格...原创 2018-04-06 16:58:00 · 282 阅读 · 0 评论 -
STL queue和priority_queue源码解析
整理至侯捷《STL源码剖析》 STL中实现了先入先出(FIFO)队列和优先队列。要想使用只需包含< queue >头文件,SGI版本源码中将其实现在stl_queue.h头文件中。下面详细分析这两种队列: 先入先出队列 queue也和stack一样是一种容器适配器,底层采用其它容器适配而成。双向开口,只运行尾部插入元素,头部弹出元素,不允许遍历,则不需要实现迭代器,实现较简单...原创 2018-04-12 15:21:50 · 359 阅读 · 0 评论 -
C++中的单例模式的实现
这几天看了下C++中单例模式的实现,发现涉及到的问题实在太多。现将看的总结如下: 单例模式顾名思义就是类只存在一个实例,分为懒汉式和饿汉式两种:懒汉式是在要使用单例的时候才创建对象,延迟了类对象创建的时间,一定程度上节省了空间,但是线程不安全;饿汉式就是在static单例指针定义时就直接创建对象,是线程安全的,因为一般多线程程序都是从单线程开始启动的,将单例的创建过程放在启动时就不会有线程安全问...原创 2018-03-28 20:11:18 · 1165 阅读 · 0 评论 -
STL stack源码解析
整理至侯捷《STL源码剖析》 stack是一种后进先出(FILO)的数据结构,单向开口,只能在栈顶执行push、pop和top操作,不允许遍历。 STL中stack是以底层容器来实现的,所以称之为容器适配器(container adaptor)。 SGI将其实现在stl_stack.h头文件中,实现非常简单,不需要提供迭代器:template <class _Tp, ...原创 2018-04-11 11:41:35 · 989 阅读 · 0 评论 -
STL deque源码剖析
deque(double-ended queue)是一种双向开口的序列容器,可以在头部和尾部进行push或pop操作,与vector不同,deque不是真正的连续线性空间,它是由分段连续空间动态组合而成。 map是一个二重指针,指向一个指针数组,数组中每个元素都为指针,指向各个相同大小的缓冲区,容器deque中的元素就放在这些缓冲区中,当map中的缓冲区满载后,就会配置一个新的map指向...原创 2018-04-10 13:13:06 · 287 阅读 · 0 评论 -
SGI STL 迭代器解析
整理至侯捷《STL源码剖析》 迭代器是一种设计模式,现在编程语言基本都语言层面支持了这种模式,定义如下:提供一种方法,使之能遍历聚合物(容器)中的各个元素,而又不暴露聚合物内部的实现细节。 在STL中,迭代器在容器和算法之间扮演着桥梁的作用,算法通过迭代器访问容器中的数据。迭代器要实现下面几个功能:迭代器是一种智能指针迭代器要实现相应型别萃取机制由于算法中可能要用到用迭代...原创 2018-03-22 10:28:36 · 289 阅读 · 0 评论 -
SGI STL容器list源码解析
template < class T, class Alloc = allocator<T> > class list;list是一个序列容器,运行在任何位置进行常数时间插入和删除操作,并且可以双向迭代。list容器使用双向循环链表实现,与其他序列容器(array,vector,和deque)相比,list在指定位置插入,抽取,和移动元素表现更好,时间复杂度为O(1)...原创 2018-04-08 21:42:01 · 410 阅读 · 0 评论 -
C++中的虚函数机制
面向对象的三大特性是封装、继承、多态。C++中有静多态和动多态的概念:静多态就是在编译时决定,比如函数重载;动多态就是在运行时决定,具体使用就是通过基类对象的指针或引用指向继承类对象,在运行时实现动态绑定,底层实现就是通过虚函数机制。 C++中动多态实现条件:有继承关系有虚函数覆写(override)基类的指针或引用指向继承类下面就不同的继承关系详解虚函数机制:单继承...原创 2018-03-13 21:19:48 · 235 阅读 · 0 评论 -
C++中new/delete、operator new/operator delete、placemet new
new/deletestring *ps=new string("hello");delete ps;new表达式实际上执行了三步操作:调用operator new标准库函数分配内存空间运行string类的构造函数构造对象返回指向该对象的指针delete表达式实际上执行了两步操作:调用ps所指对象的析构函数调用operator delete标准库函数释放内存空间 ...原创 2018-03-12 22:07:16 · 190 阅读 · 0 评论 -
SGI STL空间配置器解析
整理至侯捷的《STL源码剖析》 一般的C++内存配置操作为class Foo { ... };Foo *pF=new Foo;delete pF;new运算符包含两步操作:调用 ::operator new 配置内存调用 Foo 的构造函数构造对象delete运算符也包含两步操作:调用 Foo 的析构函数析构对象调用 ::operator delete 释放...原创 2018-03-14 19:29:13 · 151 阅读 · 0 评论 -
理解C和C++中的左值和右值
翻译至https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c/ C/C++编程中不是经常出现术语(左值)和rvalue(右值),但是一旦出现,它们的语意就不是特别清晰。最经常看到它们的地方是在编译错误和警告信息中。比如,用gcc编译下面的程序:int foo() { retur...翻译 2018-04-13 16:18:02 · 58937 阅读 · 20 评论