C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串(BV1qF411T7sd) 2. 你所不知道的 set 容器 & 迭代器分类 (BV1m34y157wb) 3. string , string_view , const char * 的爱恨纠葛 ( 本期 ) 4. 万能的 map 容器全家桶及其妙用举例 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 后一次性显示出来的,并不是真的说 Ctrl 就是 ‘ ^’ 这 个字符。 C 语言字符串 第 2 章 C 语言中的字符类型 char • char c = ‘a’; • assert(c == 97); • c = c + 1; • assert(c == ‘b’); • C 语言中规定字符类型为 char 类型,是个 8 位整数。 • 这是因为 ASCII 码只有 0~127 这些整数,而 8 位整数的表示范围是 0~255 ,足以表示所有 ASCII 字符了(多余的部分实际上被用于表示 中文)。 • char 和整数无异,例如 ‘ a’ 实际上会被编译器翻译成他对应的 ASCII 码: 97 。写 ‘ a’ 和写 (char)97 是完全一样的,方便阅读的语法糖而已。 “char 即整数”思想应用举例 “char 即整数”思想应用举例 C 语言帮手函数 帮手函数大全 • isupper(c) 判断是否为大写字母(‘0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针https://github.com/parallel101/course 请问下面这三段代码有什么错误? • float x = -3.14; • printf(“%f\n”, abs(x)); • char str[10]; • scanf(“%10s”, str); • int size = 1000; • int *arr = (int *)malloc(size); • 如果你没看出来 ... • 11111100 表示 252 11111101 表示 253 11111110 表示 254 11111111 表示 255 • 字节实际上就是 C 语言中的 unsigned char 类型。 表示更大范围的整数:字( word ) • 但是单单一个字节表示的范围还是太有限了,只能表示 0 到 255 的值。 • 如何扩大表示范围?简单,用两个字节合在一起即可,例如: • 64 位 Windows 32 位 Windows 64 位 char 8 位 8 位 8 位 8 位 short 16 位 16 位 16 位 16 位 int 32 位 32 位 32 位 32 位 long 32 位 64 位 32 位 32 位 long long 64 位 64 位 64 位 64 位 char 又称字符类型,可以表示一个字符,因而得名。 short 是短整数类型,大小为0 码力 | 128 页 | 2.95 MB | 1 年前3
Working with Asynchrony Generically: A Tour of C++ Executors// This is a coroutine: unifex::taskread_socket_async(socket, span<char, 1024>); int main() { socket s = /*...*/; char buff[1024]; auto [cbytes] = std::this_thread::sync_wait( read_socket_async(s unifex::task read_socket_async(socket, span<char, 1024>); unifex::task concurrent_read_async(socket s1, socket s2) { char buff1[1024]; char buff2[1024]; auto [cbytes1, cbytes2] = // Type-erased receiver waiting for a keyclick: struct pending_completion { virtual void complete(char) = 0; virtual ~pending_completion() {} }; // Global registration of next completion: std::atom 0 码力 | 121 页 | 7.73 MB | 6 月前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector如果要把右边这个打印的操作封装起来, 该怎么做? • 可以用一个函数来封装打印操作: • print(vector<char> const &a); 迭代器模式 • 如果要把右边这个打印的操作封装起来, 该怎么做? • 可以用一个函数来封装打印操作: • print(vector<char> const &a); • 但是这样的缺点是他只能打印 vector 类 型,没法打印 string 类型。要支持 • 注意到 vector 和 string 的底层都是连续 的稠密数组,他们都有 data() 和 size() 函数。 • 因此可改用首地址指针和数组长度做参数 : • print(char const *a, size_t n); • 这样 print 在无需知道容器具体类型的情 况下,只用最简单的接口(首地址指针) 就完成了遍历和打印的操作。 迭代器模式 • 使用指针和长度做接口的好处是,可以通 ,只要传参数的时候同时修改指针和长度 部分即可)。 迭代器模式 • 首地址指针和数组长度看起来不太对称。 • print(char const *begptr, size_t size); • 不妨改用首地址指针和尾地址指针如何? • print(char const *begptr, size_t endptr); • 注意看,我们在 print 里也不是用数组下 标去迭代,而是用指针作为迭代变量了。0 码力 | 90 页 | 4.93 MB | 1 年前3
C++23: An Overview of Almost All New and Updated Features= pattern.size(); // GOOD: No initialization result.resize_and_overwrite(step * count, [&](char* buf, size_t n) { for (size_t i = 0; i < count; i++) { // GOOD: No bookkeeping std::stacktrace::current()) : m_message { std::move(message) }, m_stacktrace { std::move(st) } {} const char* what() const noexcept override { return m_message.c_str(); } const std::stacktrace& trace() const buffers E.g. input: char data[] = "11 22"; std::ispanstream s { std::span<char>{data} }; int a, b; s >> a >> b; E.g. output: char data[32] {}; std::ospanstream s { std::span<char>{data} }; s << 220 码力 | 105 页 | 759.96 KB | 6 月前3
C++20: An (Almost) Complete Overviewkeywords: concept requires constinit consteval co_await co_return co_yield char8_t New identifiers: import moduleModules7 Modules Advantages Replace header files Language feature test macros __has_cpp_attribute(fallthrough) __cpp_binary_literals __cpp_char8_t __cpp_coroutines … Standard Library feature test macros __cpp_lib_concepts __cpp_lib_ranges initialization New keyword: constinit Forces constant initialization ✔ E.g.: constinit const char* a { ... };74 Class Enums and using Directive Example: enum class CardTypeSuit { Clubs, Diamonds0 码力 | 85 页 | 512.18 KB | 6 月前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器容器初体验 & 迭代器入门 (BV1qF411T7sd) 2. 你所不知道的 set 容器 & 迭代器分类 (BV1m34y157wb) 3. string , string_view , const char * 的爱恨纠葛 (BV1ja411M7Di) 4. 万能的 map 容器全家桶及其妙用举例 ( 本期 ) 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL • vectorinput = {“happy”, “world”, “hello”}; • map<char, vector > categories; • for (auto const &str: input) { • char key = str[0]; • categories[key].push_back(str); } • 则 categories 0 码力 | 90 页 | 8.76 MB | 1 年前3
Making Libraries Consumable for Non-C++ DevelopersOn failure to open, returns SIZE_MAX. */ size_t open_device(char const* dev); size_t open_device(std::wstring_view const dev); The types char and wchar_t do not indicate encoding. The size of wchar_t:0 码力 | 29 页 | 1.21 MB | 6 月前3
谈谈MYSQL那点事对大数据量表建立聚集索引,避免更新操作带来的碎片。 对大数据量表建立聚集索引,避免更新操作带来的碎片。 尽量使用短索引,一般对 尽量使用短索引,一般对 int int 、 、 char/varchar char/varchar 、 、 date/tim date/tim e e 等 等 类型的字段建立索引 类型的字段建立索引 需要的时候建立联合索引,但是要注意查询 需要的时候建立联合索引,但是要注意查询0 码力 | 38 页 | 2.04 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型http://www.netlib.org/linalg/html_templates/node91.html 第 1 章:稀疏网格 稠密网格计算粒子经过的格点数量 改用更小的 char 存储 只用一个 bit 存储,一个 char 可以存储 8 个 bit 用 map 来存储 读取:如果不存在,则读到 0 写入:如果不存在,则创建该表项 用 unordered_map 来存储 map 基于红黑树,会按照键值排序,需要键值具有0 码力 | 102 页 | 9.50 MB | 1 年前3
共 16 条
- 1
- 2













