![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c11
文章平均质量分 64
千里修行
这个作者很懒,什么都没留下…
展开
-
windows 线程一般用法
目录一. 线程说明1. 概念 2. 线程与进程 3. 执行二. windows下的各种线程 1. win32线程 (1) CreateThread (2) _beginthreadex (3) 如何选择使用哪个线程函数 2. mfc线程 (1) 工作线程:AfxBegin...原创 2021-07-27 01:44:26 · 1490 阅读 · 0 评论 -
观察者模式的通用性调用
1.通用框架接口#ifndef _OBSERVERIMP_H__#define _OBSERVERIMP_H__#include "stdafx.h"#include <map>#include <vector>template <typename ReturnT, typename ParamT>class ReceiverImplBase;template <typename ReturnT, typename ParamT>c原创 2021-02-25 02:31:48 · 319 阅读 · 0 评论 -
新增关键字default, delete, final, override
详细说明:https://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/index.html原创 2019-12-24 12:40:51 · 156 阅读 · 0 评论 -
可变模板参数
基本语法: template <typename... T>void f(T... args); 参数个数: template<typename... T> void PrmCount(T... Prm) { printf("prm count:%d \n", sizeof...(Prm)); } 参数包的展开:递归方式和逗号表达式 (1)递归方式:参数包展开的函数和一个递归终止函数,两个条件必须满足 template<ty...原创 2020-11-24 13:51:40 · 185 阅读 · 0 评论 -
std::chrono获取UTC
1.durationduration:自定义时间间隔单位 std::chrono::hours hs(2);//2小时 std::chrono::minutes mns(4);//4分钟 std::chrono::seconds ss(1);//1秒钟 std::chrono::milliseconds mls(5);//5毫秒 std::chrono::microseconds mcs(7);//7微秒 std::chrono::nanoseconds nns(8);//8纳秒du原创 2020-11-30 22:14:02 · 1941 阅读 · 0 评论 -
STL比较常见的算法
头文件:#include <algorithm> sort:数列排序=============is_sorted:是否按规则排序 std::vector<int> vecArray = { 4, 1, 6, 9, 3, 1, 4 }; std::sort(vecArray.begin(), vecArray.end());//1, 1, 3, 4, 4, 6, 9 默认升序 std::sort(vecArray.begin(), vecArray.end(), [](int原创 2020-11-25 17:28:22 · 234 阅读 · 1 评论 -
async替代线程函数
async原型:template<class Fn, class... Args>future<typename result_of<Fn(Args...)>::type> async(launch policy, Fn&& fn, Args&&...args);线程创建策略:std::launch::async 实时创建线程====================std::launch::deferred 延迟创建线程,直到..原创 2020-11-25 01:47:55 · 180 阅读 · 0 评论 -
move和forward完美转发
产生条件:一个右值引用参数作为函数的形参,在函数内部再转发该参数的时候它已经变成一个左值------>std::move和std::forward应运而生; move vs forward:move----->无条件转换为右值;forward----->保持原参数属性,即完美转发; 举例说明:#ifndef _TRANS_H__#define _TRANS_H__#include "stdafx.h"class CTrans{public: template<原创 2020-11-16 16:41:04 · 566 阅读 · 0 评论 -
元组:tuple
元组tuple:make_pair的泛化,固定大小不同类型值集合的容器,基本功能跟结构体相似;但又不仅仅限于此,配合模板编程可以生成强大的组件; 赋值: //方式1 std::tuple<int, int, std::string> tuData1(1, 2, "35");//直接赋值 //方式2 std::tuple<int, int, std::string> tuData2; tuData2 = std::make_tuple(1, 2, "abc");取值:原创 2020-11-16 02:48:00 · 105 阅读 · 0 评论 -
初始化列表:initializer_list
变长容器STL的初始化:本质是依赖initializer_list的模板类来实现。 std::vector<int> vecArray = {2, 3, 4, 5, 6}; std::map<std::string, int> mapArray = { {"张三", 4}, {"李四", 6}, {"孙六", 7} };成员:size(), begin(), end(); 构造或成员函数初始化入参#include "stdafx.h"#include <ini原创 2020-11-13 16:37:48 · 247 阅读 · 0 评论 -
别名using和typedef
定义一个map:一个key需要映射两个value---------typedeftypedef std::map<std::string, int> mapList;typedef std::map<std::string, std::string> mapList1;使用模板类:-------------typedeftemplate<typename T>struct ST_MAP{ typedef std::map<std::string,原创 2020-11-10 02:47:55 · 98 阅读 · 0 评论 -
自动类型推导(auto,decltype)
auto:在编译时期确定待定义的变量类型;decltype:在编译时期推导一个表达式(不一定要定义)的类型(在满足auto功能的基础上) 应用场景:多用在泛型编程应用中(stl,模板等) typeDerivate.hpp#ifndef _TYPEDERIVATE_H__#define _TYPEDERIVATE_H__#include "stdafx.h"#include <vector>class CTypeDerivate{public: void Func()原创 2020-11-10 02:04:28 · 305 阅读 · 0 评论 -
智能指针
C++11引用了智能指针来解决内存泄漏的问题,特别在大型项目中new和delete频繁使用后,导致后期维护成本的持续走高。智能指针可以很好解决这一问题,但智能指针的使用也存在一些陷阱,只有熟练使用之后才能让它成为利器。为了更好地反应问题现象,先封装一个检测内存泄漏的API来进行测试,下面就shared_ptr,unique_ptr,weak_ptr进行说明。内存检测api#ifndef _...原创 2019-12-26 19:58:44 · 552 阅读 · 0 评论 -
C++11:function和bind
1.std::function 作为函数,函数对象,函数指针和成员函数的包装器 #include <functional>普通函数void Test(){ printf("Test Call\n");}... ...std::function<void()> pfnTest = Test;pfnTest();成员函数:需要...原创 2020-01-08 05:09:10 · 332 阅读 · 0 评论 -
C++11 lambda表达式
1.作用:可以方便的定义和创建匿名函数,以更直接的方式去写程序,具有更好的可读性和可维护性。2.语法形式:[ capture ] ( params ) -> ret { body }3.变量捕获:[] 不截取任何变量[&} 截取外部作用域中所有变量,并作为引用在函数体中使用[=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用[=, &foo] 截取外...原创 2020-01-08 06:12:21 · 257 阅读 · 0 评论 -
C++11 右值引用
1.识别方法:可对表达式用“&”取值,为左值;否则,为右值。左值可以看作是“对象”,右值可以看作是“值”。左值和右值的区分int iVar;iVar = 5;//(iVar + 3) = 7; 解析:iVar是临时变量,&iVar可获取到地址,在寄存器上有确定的存储地址,直到离开作用域时,才销毁! &(iVar +...原创 2020-01-10 03:25:33 · 151 阅读 · 0 评论