C++
个人学习心得
小瓶子的笔记本
这个作者很懒,什么都没留下…
展开
-
C++ 虚继承
在 C++ 多继承中,可能会出现 the most derived class 拥有多个 the most based class 的多份相同数据成员。比如说下面这种菱形继承的情况:class A{public: int a;};class B : public A{public: int b;};class C : public A{public: int c;};class D : public B, public C{public: int d;};原创 2020-06-23 22:34:26 · 216 阅读 · 0 评论 -
C++ 11新特性(一)
【侯捷-C++11新特性-variadic templates】用例void print(){}template<typename T, typename... Types>void print(const T& firstArg, const Types&... args){ std::cout << "variadic params ...原创 2020-03-13 08:34:27 · 763 阅读 · 0 评论 -
C++ STL源码分析——tuple
【侯捷-SL体系结构内核分析-tuple】tuple也是一个容器,它可以将任意类型的数据组合在一起,形成一个容器对象,它可以用于函数返回多个值。定义对象如下:tuple<int, double, const char*> t1;可以在定义时可以直接初始化,也可以直接赋值:tuple<int, double, const char*> t1(12, 20.5, "z...原创 2020-03-07 22:00:55 · 538 阅读 · 0 评论 -
C++ STL源码分析——一个万用的 hash function
【侯捷-SL体系结构内核分析-一个万用的 hash function】我们知道,unordered_set / unordered_multiset / unordered_map / unordered_multimap 内部是用哈希表实现的,需要一个哈希函数来计算元素应该放在哪个 bucket 中。对于基本的数据类型,比如 int, float, double, string等,STL为我们...原创 2020-03-07 18:28:59 · 1839 阅读 · 4 评论 -
C++ STL源码分析——适配器之流适配器
【侯捷-SL体系结构内核分析-适配器】ostream_iteratoristream_iteratorostream_iterator先来看看一段使用代码:void main(){ vector<int> vec = { 1, 2, 3, 4, 5 }; std::ostream_iterator<int> o_it(std::cout, ",");...原创 2020-03-06 21:02:31 · 231 阅读 · 0 评论 -
C++ STL源码分析——适配器之迭代器适配器
【侯捷-SL体系结构内核分析-适配器】什么是逆向迭代器容器除了拥有返回正向迭代器的函数 begin 和 end 之外,还有两个类似的成员函数 rbegin 和 rend,它们返回的是容器的逆向迭代器,它们之间的相互关系如下:begin() 返回指向容器头元素的正向迭代器;end() 返回指向容器尾元素的下一个位置的正向迭代器。rbegin() 返回指向容器尾元素的逆向迭代器;rend(...原创 2020-03-06 12:52:48 · 274 阅读 · 0 评论 -
C++ STL源码分析——适配器之仿函数适配器 bind2nd 以及 bind
【侯捷-SL体系结构内核分析-适配器】bind2nd 为二元函数适配器,指定二元函数的第二个参数,将二元函数转变为一元函数。比如下面这个例子:int main(){ vector<int> vec = vector<int>{ 4, 5 ,6 ,3, 5 ,8 ,3 }; int count = count_if(vec.begin(), vec.end(), b...原创 2020-03-03 08:03:53 · 383 阅读 · 1 评论 -
C++ STL源码分析——仿函数
【侯捷-SL体系结构内核分析-仿函数】STL提供的标准仿函数可以分为三类:算数类、逻辑运算类和相对关系类。算术类,比如 plus, minus等逻辑运算类,比如 logical_and相对关系类,比如equal_to, lessSTL规定,当自己写仿函数来配合 algorithm 操作时,为达到仿函数的 可适配(adaptable)的条件,仿函数必须继承 unary_function...原创 2020-03-02 16:45:59 · 257 阅读 · 0 评论 -
C++ STL源码分析——算法(二)
【侯捷-SL体系结构内核分析-算法】目录:count, count_iffind, find_ifsortcount, count_ifcount 源码template<class _InIt, class _Ty> _NODISCARD inline _Iter_diff_t<_InIt> count(const _InIt _First, cons...原创 2020-03-02 12:32:34 · 476 阅读 · 0 评论 -
C++ STL源码分析——算法(一)
accumulate原创 2020-03-01 20:16:07 · 544 阅读 · 0 评论 -
C++ STL源码分析——iterator分类
【侯捷-SL体系结构内核分析-iterator】itertor需要向algorithm提供自身的类型 iterator_category,iterator分为以下五种类型:random_access_iterator_tag,可跨任意距离取值bidirectional_iterator_tag,可前进或后退forward_iterator_taginput_iterator_tago...原创 2020-02-29 08:18:16 · 403 阅读 · 0 评论 -
C++ STL源码分析——map和multimap
【侯捷-SL体系结构内核分析-map和multimap探索】map和multimap底层同样以红黑树_Tree作为支撑,关于红黑树_Tree可以看看我的这篇文章:C++ STL源码分析——set和multiset_Traits参数map和multimap的红黑树_Traits参数如下:template<class _Kty, // key type class _Ty, // ma...原创 2020-02-24 16:58:31 · 628 阅读 · 0 评论 -
C++ STL源码分析——set和multiset
STL中assosiated container 比如 set 和 multiset 底层都是由红黑树作为支撑实现,所以在了解他们之前,有必要先来了解一下红黑树。在这里插入代码片原创 2020-02-22 20:32:01 · 511 阅读 · 0 评论 -
C++ STL源码分析—queue和stack
【侯捷-SL体系结构内核分析-queue和stack探索】总结queue和stack底层默认是由deque实现,所有某种程度上queue和stack不被称为容器,而可以被称为容器queue的adapter。template<class _Ty, class _Container = deque<_Ty> > class queue { // FIFO que...原创 2020-02-19 16:16:53 · 752 阅读 · 0 评论 -
C++ STL源码分析—deque
容器类成员变量包装类 _XXX_valtemplate<class _Val_types> class _Deque_val : public _Container_base12 { // base class for deque to hold datapublic: using value_type = typename _Val_types::value_type;...原创 2020-02-19 15:28:23 · 792 阅读 · 1 评论 -
C++ STL容器源码—forward_list
【侯捷-SL体系结构内核分析-forward_list探索】以forward_list为例,分析源码框架。容器类成员变量包装类 _XX_val其中,变量 _Myhead就是forward_list的头指针。容器类继承关系_Flist_alloc类容器allocator的基类,其中含有数据成员_Flist_val。2. _Flist_buy类继承自_Flist_alloc类...原创 2020-02-14 20:54:31 · 291 阅读 · 0 评论 -
vector容量增长方式
【侯捷-SL体系结构内核分析-vector探索】查看vs2017中vector源码时,发现vs中vector容量的扩充并不是2 * oldCapacity的增长方式,而是oldCapacity + oldCapacity / 2的增长方式,相关源代码如下: size_type _Calculate_growth(const size_type _Newsize) const { // g...原创 2020-02-14 15:23:44 · 287 阅读 · 0 评论