
C++标准库
文章平均质量分 73
csdn_cjc
这个作者很懒,什么都没留下…
展开
-
并发实践:线程池
class ThreadPool{ std::queue<std::function<void()>> _tasks; // 任务队列 std::vector<std::thread> _threadPool; // 线程池 int _cntThread; // 线程数 std::mutex _mutex; std::condition_variable _cv; std::atomic<bool> _stop;public: Thr原创 2021-03-05 15:33:30 · 86 阅读 · 0 评论 -
同步控制:condition_variable
条件变量条件变量(condition_variable)用来实现多线程间的同步操作,控制多个线程的执行顺序。操作作用conditon_variable cv默认构造函数~conditon_variable()析构函数cv.notify_one()唤醒一个等待线程cv.notify_all()唤醒所有等待线程cv.wait(ul)使用unique_lock来等待通知cv.wait(ul, pred)使用unique_lock来等待通知,直到唤醒原创 2021-03-01 14:58:36 · 171 阅读 · 0 评论 -
独占资源:mutex和lock_gurad
mutexmutex互斥量用来以独占方式访问资源。操作作用mutex m默认构造函数,构建一个未锁定的mutex对象~mutex()析构函数m.lock()尝试锁住mutex。如果mutex已是锁定状态,会造成阻塞m.try_lock()尝试锁住mutex,成功则返回truem.try_lock_for(dur)尝试在时间段dur内锁住mutex,成功则返回truem.try_lock_until(tp)尝试在时间点tp之前锁住mutex,成原创 2021-02-25 17:10:06 · 313 阅读 · 0 评论 -
并发高层接口:async和future
asyncasync是一个辅助函数,它以同步或异步的方式执行一个函数,具体方式由发射策略决定future async(std::launch::async, F func, args…)async尝试启动一个线程,以异步的方式执行func,args是func的实参。如果启动线程失败,抛出std::system_error异常,错误码为std::errc::resource_unavailable_try_again。future async(std::launch::deferred, F fun原创 2021-02-25 14:16:01 · 186 阅读 · 0 评论 -
并发低层接口:thread和promise
threadthread是C++11引入的一个处理并发的低层接口。支持的操作操作作用thread t默认构造函数,创建一个没有关联线程(nonjoinable)的thread对象thread t(f, …)创建一个关联到线程(joinable)的thread对象。这是一个可变参模板函数,f 是线程函数,f后面的函数参数是f的传参;或抛出std::system_errorthread t(rv)移动构造函数,取rv的状态并使rv变成nonjoinable~th原创 2021-02-24 16:19:04 · 333 阅读 · 0 评论 -
Lambda表达式
语法定义:[capture] (parameters) mutable -> return-type {statement}[capture]:捕捉列表。[]是lambda表达式的引出符。capture描述了上下文能供函数体使用的变量及其使用方式(值传递或引用传递)。[capture]有以下几种基本形式:表达式意义[var]值传递方式捕捉var变量[=]值传递方式捕捉lambda表达式所在函数位置可以访问到的所有局部变量,和lambda表达式所在类的所有成员变原创 2020-12-04 15:16:44 · 398 阅读 · 0 评论 -
函数对象
STL中,很多算法提供通过回调函数的方式来定义内部的具体实现细节。说回调函数其实不准确,因为模板实参不一定是函数指针,模板函数的内部只是通过模板实参调用了operator(),模板实参只需要支持operator()就可以。所以,除了函数外,函数对象、Lambda表达式等可调用对象也可以用于算法,定义其内部实现细节1、函数对象函数对象是指内部实现了operator()的类对象,可以提供类似函数的行为:class Print{public: void operator() (string s) {原创 2020-12-03 16:38:55 · 161 阅读 · 0 评论 -
迭代器适配器
1、插入型迭代器 insert iterator使用 insert iterator 对容器元素进行赋值操作时,实际进行的是插入操作。赋值和插入操作一个明显的区别在于,赋值动作必须确保目标容器有足够的空间。插入的位置根据不同的 insert iterator有所不同:back_inserter:内部调用 push_back(),在容器末端插入元素。所以使用back_inserter的容器必须支持 push_back(),这些容器包括 vector、deque、list 和 string。front_i原创 2020-11-30 16:21:07 · 190 阅读 · 0 评论 -
迭代器分类
迭代器分类迭代器能力提供output迭代器向前输出Ostream、inserterinput迭代器向前输入Istreamforward迭代器向前输入输出forward list、unordered containersbidirectional迭代器向前、向后输入输出list、set、multiset、map、multimaprandom-access迭代器随机输入输出array、vector、deque、string纯粹的 outp原创 2020-11-30 16:08:44 · 230 阅读 · 0 评论 -
stl vector
vector表现出来的是一个大小可变、内存连续的数组。类模板定义:template <typename T, typename Allocator = allocator<T> >class vector;vector支持下列操作:操作作用vector c默认构造函数,构造一个没有任何元素的空vectorvector c(c2)复制构造函数vector c(rv)移动构造函数vector c(n)构造一个大小为n的vector原创 2020-11-27 16:02:29 · 80 阅读 · 0 评论 -
STL 概述
容器:用来管理某类对象的结合迭代器:用来遍历容器的元素算法:用来处理容器的元素基本容器分类:1、序列式容器序列式容器是一种有序容器。这里的有序不是指容器里的元素一定是按从小到大或从大到小等排列规则排序好;而是指元素插入容器后,若不人为改动元素间的相对位置,那它的位置就不会改变。STL提供了5中序列式容器:array、vector、deque、list 和forward_list,内部存储结构一般为array或linked list。vectorvector相当于一个动态数组,其内部存储结构就是原创 2020-11-26 14:32:48 · 144 阅读 · 1 评论 -
stl array
array支持的操作:操作作用array<Elem,N> c默认构造函数,元素进行默认初始化array<Elem,N> c拷贝构造函数,拷贝数组每一个元素array<Elem,N> c = c2赋值操作符,拷贝数组每一个元素array<Elem,N> c(rv)移动构造函数array<Elem,N> c = rv移动赋值操作符array<Elem,N> c = initlis原创 2020-11-26 14:23:51 · 167 阅读 · 0 评论 -
type trait
type trait是一系列模板,描述了类型的特征,定义在<type_traits>。类型判断trait作用is_void是否voidis_integral整数类型(包括bool、char、char16_t、char32_t、wchar_t)is_floating_point浮点数类型is_arithmetic整数(包括bool、char、char16_t、char32_t、wchar_t)或浮点数is_signed带符号is_un原创 2020-11-23 11:16:53 · 470 阅读 · 0 评论 -
unique_ptr
unique_ptr提供的语义是独占资源,支持下列操作:函数作用unique_ptr up默认构造函数,up为空unique_ptr up(ptr)构造函数,指定资源unique_ptr up(ptr, del)构造函数,指定资源和deleterunique_ptr up(move(up2))移动语义构造函数,up2是一个unique_ptr对象,up2的资源所有权转移到upunique_ptr up(move(ap))移动语义构造函数,ap是一个au原创 2020-11-18 21:39:06 · 119 阅读 · 0 评论 -
shared_ptr和weak_ptr
程序中需要管理各种各样的资源,为了避免内存泄露,必须确保在资源再也不需要时释放资源,智能指针提供了这一功能。C++标准提供了两大类智能指针,这里主要介绍shared_ptr。多个shared_ptr可以共享同一个资源,并在最后一个拥有资源的shared_ptr被销毁时释放资源。1、deleter2、weak_ptr...原创 2020-11-18 15:42:10 · 2423 阅读 · 0 评论 -
tuple
tuple是一个异质数据集合,是pair的扩展,支持任意数量元素。tuple是TR1引入的,由于当时语言不支持不定参模板,所以最初的tuple元素个数是有限的。C++11引入不定参模板后,tuple得到重新实现。tuple支持下列操作:函数作用tuple<T1,T2,…,Tn> t默认构造函数tuple<T1,T2,…,Tn> t(v1,v2,…,vn)构造函数,以给定值完成初始化tuple<T1, T2> t§构造函数,以pa原创 2020-11-06 14:21:10 · 329 阅读 · 0 评论 -
pair
pair是用来处理类型相同或不同的一对值的数据结构,定义于,支持下列操作:函数作用pair<T1, T2> p默认构造函数pair<T1, T2> p(val1, val2)构造函数,用val1和val2为初值pair<T1, T2> p(rv1, rv2)移动语义构造函数,rv1和rv2为右值引用pair<T1, T2> p(piecewise_construct, t1, t2)构造函数,t1和t2是tupl原创 2020-11-06 10:43:18 · 355 阅读 · 0 评论