摘要:
vector和deque之间的区别? vector:底层动态数组,内存连续,二倍方式扩容 vector vec;默认是没有开辟空间的, 0->1->2->4->8->16 可以用reserve(20) 只开辟空间,没有放置元素 deque:动态开辟的二维数组空间,第二维是固定长度的空间,扩容的时候, 阅读全文
摘要:
deque:双端队列容器(队头队尾都可入,出) 底层数据结构情况 动态开辟的二维数组,一维数组从2开始,以2倍方式进行扩容,每次扩容后,原来第二维数组 从新的第一维数组的下标oldsize/2 开始存储 如下列图序 满了扩容,扩容第1维,2倍扩 deque deq; 增加: deq.push_bac 阅读全文
摘要:
STL (standard template libaray - 标准模板库):是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 通俗来说:STL就是将常见的数据结构(例如 顺序表,链表,栈,队列,二叉树,哈希...)以模板的形式进行封装,使用时, 阅读全文
摘要:
底层数据结构:动态开辟的数组,每次以原始空间2倍扩容 vector vec; 增加 vec.push_back(100);容器末尾加元素 时间负责度O(1) 可能导致容器扩容 容器中的,对象的构造析构,内存的开辟释放,通过什么来实现? 容器的空间配置器allocator allocate deall 阅读全文
摘要:
unique_lock condition_variable 1:lock_guard 和 unique_lock 2:condition_variable wait 和 notify_all 方式1 std::mutex mtx; mtx.lock(); .. ... mtx.unlock();/ 阅读全文
摘要:
C++11多线程类库中提供了 include包含了很多原子类型 原子操作 若干汇编指令具有读-修改-写类型,也就是说它们访问存储器单元两次,第一次读原值,第二次写新值 假定运行在两个cpu上的两个内核控制路径试图通过执行非原子操作来同时读-修改-写同一个存储器。 首先两个cpu都试图读同一单元,然后 阅读全文
摘要:
多线程编程两个问题 1:线程互斥问题 竞态条件->临界区代码段->原子操作->互斥锁mutex 2:线程间的同步通信 生产者,消费者 线程模型 #include <iostream> #include <queue> #include <thread> #include <mutex> #inclu 阅读全文
摘要:
多线程程序 竞态条件:多线程程序执行的结果是一致的,不会随着CPU对线程不同的调用顺序而产生不同的运行结果. 解决?:互斥锁 mutex 经典的卖票问题,三个线程卖100张票 代码1 #include <iostream> #include <thread> #include <list> #inc 阅读全文
摘要:
C++语言层面多线程=>好处:跨平台 windows/linux thread/mutex/condition_variable lock_gurad/unique_lock atomic/原子类型,基于CAS操作的原子类型 线程安全的 睡眠sleep_for C++ thread => windo 阅读全文
摘要:
既然lambda表达式只能使用在语句中,如果想跨语句使用之前定义好的lambda表达式,怎么办?用什么类型来表示lambda表达式? 用function类型来表示函数对象类型 bind1st/bind2nd bind 绑定器返回的都是 函数对象 lambda表达式=>函数对象 示例1 map<int 阅读全文