摘要:
一、线程的创建 #include <iostream> #include <thread> void func() { } int main(int argc, const char * argv[]) { // insert code here... std::cout << "Hello, Wo 阅读全文
随笔分类 - C++11
原子变量
2023-01-29 14:45 by jiayayao, 37 阅读, 收藏, 编辑
摘要:
C++11提供了一个原子类型std::atomic<T>, 可以使用任意类型作为模板参数,使用原子变量就不需要使用互斥量来保护该变量了。 #include <atomic> struct AtomicCounter { std::atomic<int> value{0}; void incremen 阅读全文
互斥量和条件变量
2023-01-29 14:30 by jiayayao, 52 阅读, 收藏, 编辑
摘要:
一、互斥量 std::mutex, 独占的互斥量,不能递归使用(即一个线程多次获取同一互斥量时会发生死锁); std::timed_mutex, 带超时的独占互斥量,不能递归使用; std::recursive_mutex, 可递归使用的独占互斥量,不带超时功能; std::recursive_ti 阅读全文
正则表达式
2020-01-30 11:34 by jiayayao, 196 阅读, 收藏, 编辑
摘要:
正则表达式并非C++特有,是描述了一种字符串匹配模式。 一般使用正则是为了解决如下问题: 1. 检查一个串是否包含某种形式的子串; 2. 将匹配的字符串替换; 3. 从匹配串中取出符合条件的子串; 常用的元字符: 1. “.”,匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,需 阅读全文
《STL源码剖析》要点摘抄
2017-03-14 22:45 by jiayayao, 644 阅读, 收藏, 编辑
摘要:
1. STL的空间配置器 SGI STL设计了双层级配置器,第一级配置器直接使用malloc()、free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视为“足够大”,便调用第一级配置器;当配置区块小于128bytes时,视为“过小”,为降低额外负担,便采用复杂的mem 阅读全文
C++11之std::future和std::promise
2017-03-10 20:41 by jiayayao, 9066 阅读, 收藏, 编辑
摘要:
为什么C++11引入std::future和std::promise?C++11创建了线程以后,我们不能直接从thread.join()得到结果,必须定义一个变量,在线程执行时,对这个变量赋值,然后执行join(),过程相对繁琐。 thread库提供了future用来访问异步操作的结果。std::p 阅读全文
为什么C++11引入了std::ref?
2017-03-09 20:50 by jiayayao, 29892 阅读, 收藏, 编辑
摘要:
C++本身有引用(&),为什么C++11又引入了std::ref? 主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用。如下例子: 上述代码在执行std::bind后,在函数f()中n1的值仍然是1,n2和n3改成了修改的值。说明std::bind使用的是参数的拷贝而 阅读全文
C++模板元编程
2017-02-10 22:09 by jiayayao, 3217 阅读, 收藏, 编辑
摘要:
原理:模板元程序由编译器在编译期解释执行,利用模板特化机制实现编译期条件选择结构,利用递归模板实现编译期循环结构。模板元编程(metaprogramming)意思是,编程系统将会执行我们所写的代码,来生成新的代码,而这些新代码才真正实现了我们所期望的功能。元编程最大的特点在于:某些用户自定义的计算可 阅读全文
C++虚函数实现多态原理(转载)
2017-01-12 19:17 by jiayayao, 2596 阅读, 收藏, 编辑
摘要:
一、前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术 阅读全文
STL的std::find和std::find_if
2017-01-03 20:56 by jiayayao, 13120 阅读, 收藏, 编辑
摘要:
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. STL算法的一个版本采用缺省的运算行为,该算法的另一个版本提供额外参数,接收外界传入的一个仿函数(functor),以便采用其他策略。可以采用其他策略的算法通常是以_if作为 阅读全文
C++11之lambda表达式
2016-12-11 16:41 by jiayayao, 1765 阅读, 收藏, 编辑
摘要:
lambda表达式源于函数式编程的概念,它可以就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象。lambda表达式的类型在C++11中被称为“闭包类型”,也可以理解为是一个仿函数(带operator()类),其语法形式如下: [capture] (params) opt -> r 阅读全文
反应器(Reactor)和主动器(Proactor)
2016-12-10 20:20 by jiayayao, 1624 阅读, 收藏, 编辑
摘要:
网络方面用的比较多的库是libevent和boost.asio,两者都是跨平台的。其中libevent是基于Reactor实现的,而boost.asio是基于Proactor实现的。Reactor和Proactor模式的主要区别就是真正的操作(如读/写)是由谁来完成的,Reactor中需要应用程序自 阅读全文
C++11之std::function和std::bind
2016-12-06 21:30 by jiayayao, 24815 阅读, 收藏, 编辑
摘要:
std::function是可调用对象的包装器,它最重要的功能是实现延时调用: 由上边代码定义std::function<int(int)> fr2,那么fr2就可以代表返回值和参数表相同的一类函数。可以看出fr2保存了指代的函数,可以在之后的程序过程中调用。这种用法在实际编程中是很常见的。 std 阅读全文
C++11之for循环的新用法
2016-12-06 20:12 by jiayayao, 26527 阅读, 收藏, 编辑
摘要:
C++使用如下方法遍历一个容器: 其中auto用到了C++11的类型推导。同时我们也可以使用std::for_each完成同样的功能: 现在C++11的for循环有了一种新的用法: 上述方式是只读,如果需要修改arr里边的值,可以使用for(auto& n:arr),for循环的这种使用方式的内在实 阅读全文
智能指针unique_ptr的用法
2016-12-03 17:19 by jiayayao, 10408 阅读, 收藏, 编辑
摘要:
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: 但是unique_ptr允许通过函数返回给其他的unique_ptr,还可以通过std::move来转移到其他的unique_p 阅读全文
智能指针shared_ptr的用法
2016-12-03 15:39 by jiayayao, 159791 阅读, 收藏, 编辑
摘要:
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer)。 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。 C++11提供 阅读全文