C++
C++多线程笔记
一抹烟霞
这个作者很懒,什么都没留下…
展开
-
程序计时函数
// Author: Tong Qin qintonguav@gmail.com// Shaozu Cao saozu.cao@connect.ust.hk// 一个计时函数#pragma once#include <ctime>#include <iostream>#include <string>#include <cstdlib>#include <chrono&g原创 2020-08-12 10:50:57 · 219 阅读 · 0 评论 -
动态内存与智能指针
文章目录一、简介1.1 程序使用动态内的原因:二、shared_ ptr 类2.1 make_ shared 函数2.2 shared_ptr 的拷贝和赋值2.3 shared_ ptr 和 new 结合使用‘2.4 不要混合使用普通指针和智能指针......2.5 不要使用get初始化另一个智能指针或为智能指针赋值2.6 reset()操作2.7 使用我们自己的释放操作三、unique_ptr类3.1 与shared_ptr的区别及基本操作3.2 release()和reset()3.3 传递unique原创 2020-06-14 20:35:00 · 151 阅读 · 0 评论 -
std::call_once()
std::call_once():该函数的第一个参数为标记,第二个参数是一个函数名。功能:能够保证多线程调用函数func()时只被调用一次。具备互斥量的能力,而且比互斥量消耗的资源更少,更高效。call_once()需要与一个标记结合使用,这个标记为std::once_flag;其中once_flag是一个数据结构,call_once()就是通过标记来决定函数是否执行,调用成功后,就把标记设置为一种已调用状态。std::once_flag my_flag;void func(){}std::ca原创 2020-05-31 21:36:48 · 660 阅读 · 0 评论 -
C++ 多线程 (4) 互斥量(mutex)与锁(lock)
文章目录一、基本概念二、使用方法2.1 mutex.lock(),unlock()2.2 std::lock_guard类模板2.3.1 std::lock_guard的std::adopt_lock参数2.4 std::unique_lock函数模板2.4.1 unique_lock的第二个参数std::lock()函数模板三、死锁3.1 发生原因3.2 解决办法一、基本概念在多线程环境中,有多个线程竞争同一个公共资源,就很容易引发线程安全的问题。因此就需要引入锁的机制,来保证任意时候只有一个线程在访原创 2020-05-31 12:16:20 · 3134 阅读 · 0 评论 -
C++ 多线程(3)std::thread 详解
文章目录一、头文件二、std::thread 构造函数三、其他成员函数四、传递临时参数作为线程对象的注意事项4.1 **解决办法:**4.2 原因分析4.3 总结五、传递类对象、智能指针作为线程参数5.1 修改子线程中的对象,不会影响主线程中的对象5.2 传递智能指针参考链接:一、头文件std::thread 在 头文件中声明,因此使用 std::thread 时需要包含 头文件。二、std::thread 构造函数(1). 默认构造函数,创建一个空的 thread 执行对象。(2). 初始原创 2020-05-30 21:18:55 · 15305 阅读 · 0 评论 -
c++ 多线程(2)创建线程对象的方法
文章目录一、用函数对象创建线程二、用类对象创建线程三、把某个类中的某个函数作为线程的入口地址四、用lambda表达式创建线程一、用函数对象创建线程// 用函数对象创建线程#include <iostream>#include <thread>using namespace std;void func(){ cout<<"我的线程开始执行了"<<endl; //... cout<<"我的线程结束执行了"<&原创 2020-05-30 15:10:56 · 1107 阅读 · 2 评论 -
CMake解决c++11的phread库问题:undefined reference to `pthread_create’
方法一PROJECT(HELLO)set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11")AUX_SOURCE_DIRECTORY(. SRC_LIST)ADD_EXECUTABLE(hello ${SRC_LIST})从cmake的CMakeLists.txt文件中可以看出cmake是像g++使用c++11特性一样,都有-std=c++11,所以像一样加个-pthread解决就行。PROJECT(HELLO)set(CMAKE_CXX_FLA原创 2020-05-30 14:50:57 · 1309 阅读 · 0 评论 -
STL——(11)常用算法
常用算法1 常用遍历算法1.1 for_each1.2 transform2 常用查找算法2.1 find2.2 find_if2.3 adjacent_find2.4 binary_search2.5 count2.6 count_if3 常用排序算法3.1 sort3.2 random_shuffle3.3 merge3.4 reverse4 常用拷贝和替换算法4.1 copy4.2 repl...原创 2020-05-03 20:45:52 · 642 阅读 · 0 评论 -
STL——(10)函数对象(仿函数)
函数对象1 函数对象概念1.1 函数对象使用2 谓词2.1 谓词概念2.2 一元谓词2.3 二元谓词3 内建函数对象3.1 内建函数对象意义3.2 算术仿函数3.3 关系仿函数3.4 逻辑仿函数1 函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数1.1 函数对象...原创 2020-05-03 20:34:28 · 354 阅读 · 0 评论 -
STL——(9)map/ multimap容器
map/ multimap容器1. map基本概念2. map构造和赋值3. map大小和交换4. map插入和删除5. map查找和统计6. map容器排序10. 案例-员工分组10.1 案例描述10.2 实现步骤1. map基本概念简介:map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序...原创 2020-05-03 20:27:24 · 198 阅读 · 0 评论 -
STL——(8)set/ multiset 容器和pair对组
set/ multiset 容器和pair对组1 set基本概念2 set构造和赋值3 set大小和交换4 set插入和删除5 set查找和统计6 set和multiset区别7 pair对组创建8 set容器排序1 set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset区别:set不...原创 2020-05-03 19:28:20 · 290 阅读 · 0 评论 -
STL——(7)list容器
list容器1. list基本概念2 list构造函数3 list 赋值和交换4 list 大小操作5 list 插入和删除6 list 数据存取7 list 反转和排序8 排序案例1. list基本概念**功能:**将数据进行链式存储链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存...原创 2020-05-03 19:23:50 · 435 阅读 · 0 评论 -
STL——(6)queue 容器
3.6.1 queue 基本概念概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为 — 入队 push队列中出数据称为 — 出队 pop3.6.2 queue 常用接口功能描述:栈容器常用的对外接...原创 2020-05-03 19:16:57 · 110 阅读 · 0 评论 -
STL——(5)stack容器
stack容器1. stack 基本概念2. stack 常用接口1. stack 基本概念概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为 — 入栈 push栈中弹出数据称为 — 出栈 pop2. stack 常用接口功能描述:栈容器常用的对外...原创 2020-05-03 19:11:38 · 106 阅读 · 0 评论 -
STL——(4)deque
deque容器1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque 插入和删除6. deque 数据存取7. deque 排序8. 案例-评委打分8.1 案例描述8.2 实现步骤1. deque容器基本概念功能:双端数组,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数...原创 2020-05-03 16:57:11 · 154 阅读 · 0 评论 -
STL——(3)string容器
string容器1. string基本概念2. string构造函数3. string赋值操作4. string字符串拼接5. string查找和替换6. string字符串比较7. string字符存取8. string插入和删除9. string子串1. string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char * 区别:c...原创 2020-05-03 16:23:10 · 106 阅读 · 0 评论 -
STL——(2)Vector
Vector1 vector存放内置数据类型2 Vector存放自定义数据类型3 Vector容器嵌套容器STL中最常用的容器为Vector,可以理解为数组1 vector存放内置数据类型容器: vector算法: for_each迭代器: vector<int>::iterator示例:#include <vector>#include &...原创 2020-05-03 16:17:51 · 230 阅读 · 0 评论 -
STL——(1)初识
@[TOC] STL初识STL初识1 STL的诞生长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了STL2 STL基本概念STL(Standard Template Library,标准模板库)S...原创 2020-05-03 15:33:34 · 199 阅读 · 0 评论 -
ASCII码和转义字符
ASCII码表格:ASCII值控制字符ASCII值字符ASCII值字符ASCII值字符0NUT32(space)64@96、1SOH33!65A97a2STX34"66B98b3ETX35#67C99c4EOT36$68D100d5ENQ37%69E10...原创 2020-05-03 13:54:28 · 2616 阅读 · 0 评论 -
c语言——字符串操作
字符串操作一、字符串基本操作1.1初始化1.2 字符串拷贝二、字符串的格式化2.1 sprintf2.2 sscanf一、字符串基本操作1.1初始化//字符串基本操作//字符串是以0或者'\0'结尾的字符数组,(数字0和字符'\0'等价)void test01(){ //当输出的时候,从开始位置直到找到0结束 //因为输出结尾没有0,会出错 char str1[] = { 'h'...原创 2020-05-02 11:51:30 · 247 阅读 · 0 评论 -
C语言——文件操作
文件操作一、 文件的打开和关闭1.1 文件指针1.3 文件的关闭二、 文件的顺序读写2.1 按照字符读写文件fgetc、fputc2.2按照行读写文件fgets、fputs2.3按照格式化文件fprintf、fscanf2.4按照块读写文件fread、fwrite三、 文件的随机读写四、 Windows和Linux文本文件区别五、 获取文件状态六、 删除文件、重命名文件名七、 文件缓冲区7.1文件...原创 2020-05-02 10:28:50 · 241 阅读 · 0 评论