C++_C++11_STL
c++11和STL的分享
珠峰之巅-程序员
这个作者很懒,什么都没留下…
展开
-
c++11-消息总线库
消息总线对象间只通过消息来联系,不通过直接的依赖或者关联。消息总线将复杂的关系简化,降低复杂度。消息总线关键技术1)通用的消息定义让所有额对象都通过消息来联系,定义一种通用的消息格式2)消息的注册让所有对象都可以注册感兴趣的消息3)消息分发通过消息总线分发消息,让所有的接受者都能接收到并处理消息通用消息的定义...原创 2021-05-04 17:14:07 · 1038 阅读 · 0 评论 -
c++11线程池
线程池的作用避免大量的线程的创建和销毁,节约系统资源线程池的分类线程池的实现分为两类:1)半同步半异步的线程池2)领导者和追随者模式参考:https://blog.csdn.net/vjhghjghj/article/details/103956236?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242半同步半异步的线程池共分为3层,第一层原创 2021-05-04 14:45:36 · 223 阅读 · 0 评论 -
C++11与设计模式的交流
单例模式针对多个参数的单例模式,使用变长类型的模版template<T>class Singleton{public:template<typename ... Args>static T* Instance(Args... args){ if(m_pInstance==nullptr){ m_pInstance=new T();}return m_pinstance;}}...原创 2021-05-04 11:20:25 · 150 阅读 · 0 评论 -
c++11 chrono
std::chronostd::chrono::minutes-分std::chrono::hours-小时std::chrono::seconds-秒std::chrono::milliseconds-msstd::chrono::microsecond-微妙std::chrono::naoseconds-纳秒时间点的timepointtimepoint是一个时间点,用来获取它的clock的纪元开始经过的duration和当前时间。time_point必须用clock来计时原创 2021-05-04 10:06:03 · 205 阅读 · 0 评论 -
c++11 多线程
线程的创建#include<thread>void func(){}std::thread t(func);Join函数将会阻塞线程,直到线程函数执行结束。如果不希望线程被阻塞执行,可以调用线程的detach()方法,将线程和对象分离,当前线程不会阻塞。线程不能赋值,但是可以移动;std::thread t(func);std::thread t1(std::move(t));线程对象t将不再不代表任何线程。注意线程对象的声明周期,确保函数执行的过程中,thr原创 2021-05-03 23:02:22 · 151 阅读 · 0 评论 -
c++11-type_traits类型萃取
Type_traitstype_traits类型选择功能,在一定的程度上,消除了if..else,switch-case。提供类型判断的功能。c++11定义常量:template<typename Type>struct GetLeftSize::std::interal_constant<int,1>{};根据GetLeftSize::value来获取常量1;类型判断的traits:is_voidis_class..........is_原创 2021-05-03 11:59:39 · 710 阅读 · 0 评论 -
c++11-std::function&bind
std::function可调用对象如下:是一个函数指针 一个具有operator()成员函数的类对象 一个可被转换为函数指针的类对象 是一个类成员指针std::function是可调用对象包装器,是一个类模版,可以容纳除类成员函数指针外的所有可调用对象。头文件是<functional>void func(void){}class Foo{ public: static int foo_func(int a);}class...原创 2021-05-03 11:17:47 · 132 阅读 · 0 评论 -
c++11-Varadic Templates&右值引用&lamada
Varadic Templates右值引用:Lamda没有默认构造函数。原创 2021-05-03 10:38:48 · 269 阅读 · 0 评论 -
c++11-decltype
原创 2021-05-02 13:35:27 · 88 阅读 · 0 评论 -
c++11-final
原创 2021-05-02 13:29:16 · 101 阅读 · 0 评论 -
c++ overide
原创 2021-05-02 13:28:27 · 146 阅读 · 0 评论 -
c++11-noexcept
原创 2021-05-02 13:24:35 · 118 阅读 · 0 评论 -
c++11 Type Alias
using func=void(*)(int,int);void example(int,int){}func fn=example;template<typename T>struct Container{using value_type=T;};template<typename Cntr>void fn2(const Cntr&c)原创 2021-05-02 13:09:04 · 127 阅读 · 0 评论 -
c++11-template template Parameter
template<typename T, template<class> class Container>class XCIs{ private: Container<T> c;public:Container<T> cl(c);}};原创 2021-05-02 12:59:33 · 115 阅读 · 0 评论 -
c++11- Alias Template
原创 2021-05-02 11:03:19 · 136 阅读 · 0 评论 -
c++11=default,=delete
原创 2021-05-02 10:59:26 · 67 阅读 · 0 评论 -
c++11-explicit
禁止做自动转换。explicit P(int a,int b,int C).原创 2021-05-02 10:18:23 · 93 阅读 · 0 评论 -
c++-initializer_list
void prit(std::initializer_list<int> vals){ for(auto p=vals.begin();p!=vals.end();++P)........}print({1,2,3,3});print(int a,int b) print(std::initializer_list<int> vals)P p(77,5)-1P p{77,5}-2P r{77,5,3}-2原创 2021-05-02 09:41:53 · 81 阅读 · 0 评论 -
c++11-auto,nullptr
auto i=30;nullptr原创 2021-05-01 23:52:28 · 126 阅读 · 0 评论 -
c++11-Variadic Templates
template <typename T, typename... Types>void printX(const T& firstArg, const Types&... args){ cout<<firstArg<<endl; printX(args...);}原创 2021-05-01 23:22:39 · 112 阅读 · 0 评论 -
c++-内存管理-bitmap_alloctor
用64个bit来表示原创 2021-05-01 16:27:04 · 162 阅读 · 0 评论 -
c++-内存管理-debug_allocator
原创 2021-05-01 16:02:45 · 182 阅读 · 0 评论 -
c++-内存管理-array allocator
原创 2021-05-01 15:49:17 · 182 阅读 · 0 评论 -
c++内存管理-内存顺序
内存顺序转载 2021-05-01 14:51:17 · 969 阅读 · 0 评论 -
c++-内存管理-内存对齐方式
对齐方式原创 2021-05-01 14:50:42 · 762 阅读 · 0 评论 -
C++-Loki Allocator
chunk数据结构:firstAvailableBlock:正在使用的indexblocksAvailable:还有多少原创 2021-05-01 14:50:09 · 143 阅读 · 0 评论 -
c++-内存管理-shared_ptr等
// CLASS TEMPLATE _Ptr_basetemplate<class _Ty> class _Ptr_base { // base class for shared_ptr and weak_ptrpublic: using element_type = remove_extent_t<_Ty>; _NODISCARD long use_count() const noexcept { ...原创 2021-04-30 23:10:38 · 555 阅读 · 1 评论 -
c++-内存管理-G4.9
原创 2021-04-29 22:19:48 · 433 阅读 · 0 评论 -
c++-内存管理-G2.9
以上是旧版本的分配器。它使用的是std::alloc原创 2021-04-29 22:16:25 · 187 阅读 · 0 评论 -
c++-内存管理-BC5
注解:图来自侯捷ppt原创 2021-04-29 22:09:09 · 125 阅读 · 0 评论 -
c++内存管理-VC6
malloc带有cookie,用掉8个字节。原创 2021-04-29 22:06:50 · 146 阅读 · 0 评论 -
c++内存管理-分配失败
分配失败分配失败,会抛出std::bad_alloc exception,并且返回的指针为0;在抛出异常之前,会调用这个函数new_handler。typedef void (*new_handler)();让更多内存 调用abort,exitnew_handler set_new_handler(new_handler p) throw;while(p==mallock(size)==0) TRY_BEGIN if(_callnew...原创 2021-04-29 21:44:29 · 391 阅读 · 0 评论 -
c++ static allocator
static allocator定义一个allocator来管理内存分配class allocator{ public: void* allocate(size_t); void deallocate(void*, size_t); private: const int CHUNK=5; struct obj{ stru...原创 2021-04-28 22:52:17 · 180 阅读 · 0 评论 -
c++ 内存分配
可以重载operator new,分配一大块,然后用单链表的形式存储。重载operator delete,把空间重新插入到头部。原创 2021-04-28 22:09:07 · 81 阅读 · 0 评论 -
STL-hasmap源码
HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。HashMap储存的是键值对,HashMap很快。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap 内部结构:可以看作是数组和链表结合组成的复合结构,数组被分为一个个桶(bucket),每个桶存储有一个或多个Entry对象,每个Entry对象包含三部分key(键)、value(值),next(指向下一个Entry),通过哈希值决定了Entry对象在这个数组的寻址;哈希值相同转载 2021-04-28 21:51:21 · 139 阅读 · 0 评论 -
STL-bitset源码解析
bitset原创 2021-04-28 20:25:20 · 160 阅读 · 0 评论 -
STL-String源码分析
String是一个模版:template<class _E, class _Tr=char_traits<_E>, class _A=allocator<_E> >class Mybasic_string原创 2021-04-27 21:57:02 · 224 阅读 · 0 评论 -
STL-红黑树源码实现
红黑树的介绍它是一种特殊的二叉查找树,红黑树的每个节点上都有存储位表示节点的颜色,可以是红或者黑。红黑树的特性1.每个节点或者黑色或者红色2.根节点是黑色3.每个叶子节点是黑色4.如果一个节点是红色,它的子节点必须是黑色的5.从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点红黑树的操作左旋对x进行左旋,意味着“将X变为一个左节点”右旋红黑树的实现节点的定义struct _Node { _Nodeptr _Left, ...原创 2021-04-25 10:08:56 · 178 阅读 · 0 评论 -
STL-Deque的实现
1.STL-Deque的原理buyback:pointer _P = allocator.allocate(_DEQUESIZE, (void*)0); if (empty()) { _Mapsize = _DEQUEMAPSIZE; size_type _N = _Mapsize / 2; _Getmap(); _Setptr(_Map + _N, _P); ...原创 2021-04-17 21:28:37 · 426 阅读 · 0 评论 -
vector
#pragma once#include "xmemory.h"template<class _Ty,class _A=Allocator<_Ty> >class vector {public: using size_type =typename _A::size_type; using difference_type=typename _A::difference_type; using pointer=typename _A::pointer_ty...原创 2021-04-17 13:29:50 · 68 阅读 · 0 评论