C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
CMake 用户找到并了解该包的具体信息。 • /usr/lib/cmake 这个位置是 CMake 和第三方库作者约定俗成的,由第三方库的安装程序 负责把包配置文件放到这里。如果第三方库的作者比较懒,没提供 CMake 支持(由安装 程序提供 XXXConfig.cmake ),那么得用另外的一套方法( FindXXX.cmake ),稍后细 谈。 Windows 系统下的搜索路径 •/ 0 码力 | 56 页 | 6.87 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器
较两者第一个字符(按 ASCII 码比较),如果相等则继续比较 下一个,不相等则直接以这个比 较的结果返回。如果比到末尾都 相等且字符串长度一样,则视为 相等。 警告:千万别用 set做字符串集合。 这样只会按字符串指针的地址去判断相等, 而不是所指向字符串的内容。 set 的排序:自定义排序函数 • set 作为模板类,其实有两 个模板参数: set • 第一个 insert(int val); 向 set 中插入元素 • 刚刚说过 set 具有自动去重 的功能,如果插入的元素已 经在 set 中存在,则不会完 成插入。 • 例如往集合 {1,2,4} 中插入 4 则什么也不会发生,因为 4 已经在集合中了。 • pair insert(int val); insert 的第二个返回值:表示插入是否成功 • insert 函数的返回值是一个 find(2) begin() end() * * * 出错! 在 set 中查询元素是否存在 • 因此,可以用这个写法: • set.find(x) != set.end() • 来判断集合 set 中是否存在 元素 x 。 • 这是个固定的写法,虽然要 调用两个函数看起来好像挺 麻烦,但是大家都在用。 • iterator find(int const &val) const; 0 码力 | 83 页 | 10.23 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器
查找指定元素的最坏复杂度为 O(n) 。 1 4 2 8 5 7 要找的数 内存 5 ==? 地址 a a+1 a+2 a+3 a+4 a+5 set 查找为什么高效 • set 又称集合(数学概念),是专为查找优化的容器,查找元素要用他自带的 find 函数。 • seta = { 1, 4, 2, 8, 5, 7 }; • a.find(5); • set 之所以能够实现 之所以能够实现 O(logn) 复杂度高效查找,是因为他内部预先构建好了一棵二叉排序树。 • 如何构建的?请看动画: 1 4 2 8 5 7 待插入的数 set 查找为什么高效 • set 又称集合(数学概念),是专为查找优化的容器,查找元素要用他自带的 find 函数。 • set a = { 1, 4, 2, 8, 5, 7 }; • a.find(5); • set 之所以能够实现 O(logn) 复杂度高效查找,是因为他内部预先构建好了一棵二叉排序树。 • 如何构建的?请看动画: 1 4 2 8 5 7 1 待插入的数 4 set 查找为什么高效 • set 又称集合(数学概念),是专为查找优化的容器,查找元素要用他自带的 find 函数。 • set a = { 1, 4, 2, 8, 5, 7 }; • a.find(5); • set 之所以能够实现 0 码力 | 90 页 | 8.76 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串
rfind(‘l’) 会返回 8 ,因为 rfind 是优先 从尾部开始查找的。 • rfind 和 find 的最坏复杂度都为 O(n) ,最好复杂度都为 O(1) 。 find_first_of 寻找集合内任意字符 • size_t find_first_of(string const &s, size_t pos = 0) const noexcept; • size_t find_first_of(const 没错,这个 “ chset” 是个字符的集合,顺序无所谓,重复没有用。 • 如果不指定 pos ,默认为 0 ,从头开始查找。 • 其实 s.find_first_of(“chset”) 等价于 min(s.find(‘c’), s.find(‘h’), s.find(‘s’), s.find(‘e’), s.find(‘t’)) 。 find_first_of 寻找集合内任意字符 find_first_of 出来的确都是空的),我姑且称之为空格类字符 ( whitespace )。 • 如何找到第一个出现的空格类字符?如果要找第一个出现 的空格,可以用 s.find(‘ ’) ,如果要找到第一个出现的空格 类字符?空格类字符是一个集合 {‘ ’, ‘\t’, ‘\v’, ‘\f’, ‘\n’, ‘\r’} , 可以作为一个字符串来传给 find_first_of ,例如: s.find_first_of(“ \t\v\f\n\r”)0 码力 | 162 页 | 40.20 MB | 1 年前3Borsh 安全高效的二进制序列化
• 保证序列化后的二进制唯一性和确定性 • 主要序列化规则 Borsh 规范 • 整数采用低字节序( little endian) 存储 • 对于动态长度的集合,先用一个 u32 存储集合 size • 对于原本无序的集合(如 hashmap ),存储时使用 key 的字典序排序 Borsh 规范 let a: [u32; 5] = [1, 2, 3, 4, 5]; let a =0 码力 | 21 页 | 3.35 MB | 1 年前3
共 5 条
- 1