5 字符串
1 string字符串容器和泛型算法1.1 STL顺序容器 参考顺序容器部分 访问元素 也可以使用迭代器访问元素。 at会进行安全检查抛出异常。 []下标运算符不会进行检查。 back(),front() 添加元素 总共有6+3=9种插入方法。insert有额外的两种范围插入方法。 在尾部添加元素push_back(),emplace_back() 在头部添加元素push_front(),emplace_front() 在中间添加元素insert(),emplace() insert方法提供了范围插入的方法。中间插入一个元素。在给定的一个迭代器之前插入一个值。中间插入多个元素。在给定的迭代器之前插入范围迭代器内的元素。 删除元素 back、front、push_back、push_front、pop_back、pop_front、emplace_front、emplace_back。是一组首尾相关的插入操作。 insert、emplace、at、erase。是一组随机的操作。 重构容器 并非该表容器内存的大小。而是改变容器范围的大小。 1.2 ST...
7 IO
IO IO关系图 IO 类的继承关系图 目录 输入输出流iostream 文件输入输出流fstream 字符串输入输出流sstream 0 stream基础知识 IO对象没有拷贝或赋值 管理IO的状态 继承自basic_ios和basic_ios_base基类 用来记录stream可能出现的状态。 使用iostate对象来记录和管理io的状态 >> <<流运算符(流函数)会返回io的运行状态,如果成功,则会返回true,否则返回false 1234567891011121314151617181920212223#include<iostream>using namespace std;int main(){ //IO state test int a{3}; cin>>a; auto old_state = cin.rdstate();//返回s当前的状态 cout<<old_state<<endl;//输出状态 co...
8 数值
数值方法1.1 随机数头文件1#include<random> 随机数概述 随机数分布。随机数的分布方式distribution 随机数引擎。产生随机数engin。随机性的源头 随机数生成器。由一个随机数引擎和一个随机数分布,组合成一个随机数生成器。 随机数引擎的操作 编译器会自动选择一个随机数引擎作为default_random_engine的类型的引擎。 12default_random_engine e;cout<<e()<<endl; 随机数分布的操作 需要给默认的随机数引擎选择一个分布序列。 12uniform_int_distribution<unsigned> u<0,9>;default_random_engine e(323);//指定初始化的种子 生成随机数的标准操作123456789101112131415#include <iostream>#include <random>#include<ctime>using namespace st...
9 线程
并发编程与多线程1. 基础知识C++多线程 线程:线程是操作系统能够进行CPU调度的最小单位,它被包含在进程之中,一个进程可包含单个或者多个线程。可以用多个线程去完成一个任务,也可以用多个进程去完成一个任务,它们的本质都相当于多个人去合伙完成一件事。 多线程并发多线程是实现并发(双核的真正并行或者单核机器的任务切换都叫并发)的一种手段,多线程并发即多个线程同时执行,一般而言,多线程并发就是把一个任务拆分为多个子任务,然后交由不同线程处理不同子任务,使得这多个子任务同时执行。 C++多线程并发C++98标准中并没有线程库的存在,而在C++11中才提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类,。(简单情况下)实现C++多线程并发程序的思路如下:将任务的不同功能交由多个函数分别实现,创建多个线程,每个线程执行一个函数,一个任务就这样同时分由不同线程执行了。 相关的头文件说明 thread头文件:存储thread线程与this_thread 命名空间的东西。基础实现 future头文件:存储future、promise、async相关的类。高级实现 ...
12.nullptr、NULL、0
三者的区别 参考文献 区别 1 说明C中的NULL C中使用 ((void*)0)表示空指针。NULL会被替换为 ((void*)0) 12int *i = NULL;foo_t *f = NULL; 1#define NULL ((void*)0) C++中的NULL C++中void* 不能进行强制类型转换成其他类型的NULL,所以int* 类型的空指针,不能使用void* 代替,则原来的宏定义无法使用。 C++中使用0,来表示空指针。 12345#ifdef __cplusplus ---简称:cpp c++ 文件#define NULL 0#else#define NULL ((void *)0)#endif C++中的0 重载过程中会出现问题,因为空指针会被识别为整形的0,从而导致重载出现错误。 0指针的二义性。 C++中的nullptr nullptr 关键字,被自动转换为各种pointer类型。但他不会不转换为任何整型类型。防止null作为参数的时候出现函数重载的错误。 主要区别 nullptr关键字:nullptr是一种特殊类型的字面值,它可...
11 lambda表达式
lambda表达式1 简介对象分类对象的分类 基础类型的对象 复合类型的对象 类类型的对象 函数对象 可调用对象可调用对象是可以使用函数调用运算符()的对象。 函数 函数指针 重载了函数调用运算符的类 lambda表达式 2 使用Lambda表达式定义 形式。仅仅是形式上不同的函数。capture list捕获列表是外部的局部变量的列表,捕获后可以在函数内部使用。 1[capture list](parameter list) -> return type {function body} 没有参数和返回值的lambda表达式 123auto l=[]{ cout<<"hello world"<<endl;} lambda表达式的定义完成后直接调用 1[]{ cout<<"helloworld"<<endl;}(); 有参数的lambda表达式 1auto l = [](int a,int b)...
2.2 关联容器
关联容器0 关联容器概述关联容器与顺序容器的区别 关联容器和顺序容器有着根本不同。关联容器中的元素是按关键字来把偶才能和访问的。书序容器中的元素是按他们在容器中的位置来顺序保存和访问的。 两个基础类型 map:键值对key-value。关键字是索引,值表示与索引相关的数据。 set:每个元素只包含一个关键字。支持高校的关键字查询操作。 关联容器之间的区别 是一个set或者map 要求不重复的关键字,允许重复的关键字。 按顺序保存元素。无序保存。 关联容器的头文件 <map>:map,multimap <set>:set,multiset <unorder_map>:unorder_map,unorder_multimap <unorder_set>:unorder_set,unorder_multiset 有序关联容器的原理 有序关联容器的底层一般使用红黑树实现。 泛型算法通常不对关联容器使用 无序关联容器的原理 一般使用hash表实现存储。 1 关联容器的通用操作1.1 初始化 与容器部分的初始化一致。支持六种基本的...
6 正则表达式
正则表达式 目录 regex正则表达式的定义 regex_match/search/replace正则表达式的三个操作 smatch、sregex_iterator正则表达式的结果对象以及与其配套的迭代器。 参考文献 正则表达式总结 1 正则表达式基础 不考虑子表达式的内容 头文件1#include<regex> 库组件 库组件 作用 regex 正则表达式类 regex_match 字符串与正则表达式进行匹配 regex_search 搜索第一个与正则表达式匹配的子序列 regex_replace 给定格式替换一个正则表达式 smatch 保存string中搜索的结果(s指string) sregex_iterator 迭代器,遍历string搜索的结果(s指string) 正则表达式regex12345678910111213//定义正则表达式的对象。可以使用一个string、一个字符范围迭代器对、一个字符数组指针、一个字符和一个计数器、或括号括起来的字符列表。一个可选的flag参数,主要...
5 语句
语句分类 表达式语句 复合语句 选择语句 循环语句 跳转语句 声明语句 try语句 1 简单语句分类 表达式语句 空语句 分号 复合语句,用花括号括起来——也被称作块。一个块就是一个作用域。 2 语句作用域3 条件语句if-else语句嵌套if-else语句悬垂elseelse与离他最近的if匹配。从而消除程序的二义性。 使用花括号控制执行路径switch语句default标签4 循环语句while语句12while(condition) statement dowhile语句123do statementwhile(condition) 传统for循环12for(init-statement;condition;expression) statement 范围for循环12for(delaration:expression) statement for_each循环12345678for_each(iterator begin,iterator end,func);//使用lambda函数完成循环过程中的元素修改和处理vector<int&...














