![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++STL
文章平均质量分 77
深入了解STL
芒种、
这个作者很懒,什么都没留下…
展开
-
STL 插入迭代器(back_inserter,inserter,front_inserter)
一、除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器、流迭代器、反向迭代器和移动迭代器包含头文件:#include <iterator>1. back_inserter : 返回尾部插入型迭代器,内部会调用容器的push_back()方法来将数据插入容器的尾部vector<int> vec = { 1,2,3 };vector<int> vec1 = { 0 };copy(vec.begin(), vec.end(), std::b原创 2020-07-03 17:31:51 · 513 阅读 · 0 评论 -
C++11 并发与多线程(十一、std::async详细)
一、std::async参数详述作用:创建一个异步任务(可以用来创建线程,但是一般不这么叫)std::launch::deferred : 延迟调用 std::launch::async : 强制创建一个线程std::thread() 如果资源紧张,那么可能会创建线程失败,整个程序崩溃std::async和std::thread最明显的不同,就是async有时候并不创建新线程std::launch::async: 强制这个异步任务在新线程上执行,系统一定会创建出新线程来运行二、std:原创 2020-06-15 22:50:27 · 1069 阅读 · 0 评论 -
C++11 并发与多线程(十、future其他成员函数,atomic原子操作)
一、std::future的其他成员函数//wait_for() 等待一定的时间 std::future_status status = result.wait_for(std::chrono::seconds(1)); //等待1秒 if (status == std::future_status::timeout) //超时,等你一秒钟,希望你返回,但是你没有 { //表示线程还没执行完 cout << "超时,线程还没有执行完毕" << endl; } el原创 2020-06-15 21:24:43 · 194 阅读 · 0 评论 -
C++11 并发与多线程(九、async,future,packged_task,promise)
一、std::async,std::future创建后台任务并返回值std::async 是个函数模板,用来启动一个异步任务,启动之后, 返回一个std::future对象;std::future是个类模板(异步任务:就是自动创建一个线程并开始执行对应的入口函数,它返回一个std::future 对象(线程返回结果),我们可以通过调用future对象成员函数get()来获取结果)std::future 提供了一种访问异步操作结果的机制std::future 的 get() 函数,等待线程运行结束,原创 2020-06-14 11:18:11 · 320 阅读 · 0 评论 -
C++11 并发与多线程(八、condition_variable,wait,notify_one,notify_all)
一、条件变量 condition_variable wait notify_onecondition_variable :实际上是一个类,等待一个条件达成,需要和互斥量来配合,用的时候我们要生成这个类的对象wait() : 条件变量类对象的成员函数,用来等一个东西 ;2.1. 如果第二个参数的lambda表达式返回 true , 那么wait()最接返回;2.2. 如果第二个参数的lambda表达式返回 false ,那么wait()将解锁互斥量,并阻塞到本行;阻塞到其他某个线程调用notif原创 2020-06-13 20:52:12 · 636 阅读 · 0 评论 -
C++11 并发与多线程(七、单例设计模式共享数据分析)
一、单例设计模式class Test{public: static Test *GetInstance() { if (nullptr == ptrTest) { ptrTest = new Test(); static Delete cl; //定义一个静态释放对对象 } return ptrTest; } class Delete //类中嵌套来释放对象 { public: ~Delete() { if (Test::ptrTest) {原创 2020-06-13 17:29:17 · 173 阅读 · 0 评论 -
C++11并发与多线程(六、unique_lock详解)
一、unique_lock 取代 lock_guardunique_lock是个类模板,比lock_guard 相对更灵活二、 unique_lock**的第二个参数std::adopt_lock: 是个结构体对象,起一个标记作用:表示这个互斥量已经lock(),不需要在std::lock_guard构造函数里面对对象进行再次lock()了(用这个adopt_lock前提是你自己需要先去lock)mutex1.lock();std::unique_lock<std::mutex>原创 2020-06-13 12:11:06 · 745 阅读 · 0 评论 -
C++11 并发与多线程(五、互斥量概念,用法)
一、互斥量的基本概念原创 2020-06-12 22:58:31 · 306 阅读 · 0 评论 -
C++11 并发与多线程(四、多个线程数据共享问题)
一、创建多个线程多个线程执行顺序是乱的,跟操作系统内部对线程的运行调度机制有关void MyPrint(int num){ cout << "子线程Id = " << std::this_thread::get_id() << endl; cout << num << endl;}int main(){ vector<thread> vecThread; for (int i = 0; i < 10; ++i)原创 2020-06-11 22:55:57 · 841 阅读 · 0 评论 -
C++11并发与多线程(三、线程传参,成员函数做线程函数)
一、传递临时对象作为线程参数结论:只要用临时构造A类对象作为参数传递给线程,那么就一定能够在主线程执行完毕之前把线程的第二个参数构建出来,从而确保即便detach()了,子线程也能安全运行void MyPrint(const int &num, const string &buf){ cout << num << endl; cout << buf << endl;}int main(){ int num = 1; int原创 2020-06-11 21:21:32 · 1738 阅读 · 0 评论 -
C++11 并发与多线程(二、线程创建,启动,结束)
一、线程运行的开始和结束整个进程是否执行完毕的标志是 主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了此时,如果其他子线程还没有执行完毕,那么这些子线程也会被操作系统强行终止1. 创建线程join()函数 阻塞主线程,等待子线程执行完毕,然后子线程和主线程汇合,继续执行主线程std::thread obj(MyPrint); //创建线程,线程入口函数MyPrint(),;线程开始执行obj.join(); //主线程阻塞,等待子线程执行完毕,join()执行完毕,主线程就继原创 2020-06-10 20:39:56 · 1058 阅读 · 0 评论 -
C++11 并发与多线程(一、基本概念)
一、并发,进程,线程的基本概念并发:两个或者更多任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务(使用并发的原因:主要就是同时可以干多个事,提高性能)进程:就是运行起来的可执行程序线程:代码执行的另一条通路,每个进程都有一个主线程,并且主线程唯一(主线程和进程同在),线程并不是越多越好,每个线程都需要一个独立的空间,线程之间的切换要保存很多的中间状态二、并发的两种方式多进程并发:进程间通讯(同一台电脑上:管道,文件,消息队列,共享内存;不在同一台电脑上:socket通讯)原创 2020-06-09 21:16:43 · 235 阅读 · 0 评论