C++
C++编程
镇天雷帝
这个作者很懒,什么都没留下…
展开
-
计算机常识知识点
文章目录1.堆和栈的区别进程间和线程1.堆和栈的区别1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 -原创 2020-07-28 17:50:21 · 331 阅读 · 0 评论 -
C++之vector为什么在多维上比多维的数组读写效率慢很多
慢的原因是数据存储的局部性问题(data locality):使用二位数组Depart[500][21]的时候,所有数据在内存中是连续存放的。访问内存时,内存访问的局部性较强,Cache命中的概率较大。L1 Cache访问延迟只有几个指令周期,而内存访问延迟则达到几百个指令周期。2)Vector中的数据是连续存放的,**但是Vector本身只保存指向数据块的指针。Vector建立在栈上,保存数据的数据块在堆上。因此二位动态数组Vector <Vector>中,指向行的所有指针是连续存放的原创 2020-07-16 12:57:58 · 1132 阅读 · 0 评论 -
C++之python和Lua脚本语言
文章目录PythonLuaC++ 高效、灵活,但开发周期长、成本高,在混合系统里可以辅助其他语言,编写各种底层模块提供扩展功能,从而扬长避短;pybind11 是一个优秀的 C++/Python 绑定库,只需要写很简单的代码,就能够把函数、类等 C++ 要素导入 Python;Lua 是另一种小巧快速的脚本语言,它的兼容项目 LuaJIT 速度更快;使用 LuaBridge 可以导出 C++ 的函数、类,但直接用 LuaJIT 的 ffi 库更好;使用 LuaBridge 也可以很容易地执行 L转载 2020-07-10 18:53:12 · 1548 阅读 · 0 评论 -
C++之socket
文章目录libcurl:高可移植、功能丰富的通信库cpr:更现代、更易用的通信库ZMQ:高效、快速、多功能的通信库libcurl 是一个功能完善、稳定可靠的应用层通信库,最常用的就是 HTTP 协议;cpr 是对 libcurl 的 C++ 封装,接口简单易用;libcurl 和 cpr 都只能作为客户端来使用,不能编写服务器端应用;ZMQ 是一个高级的网络通信库,支持多种通信模式,可以把消息队列功能直接嵌入应用程序,搭建出高效、灵活、免管理的分布式系统。我们知道了数据或者对象的序列化,现在,转载 2020-07-10 18:24:26 · 1344 阅读 · 0 评论 -
C++之序列化
文章目录序列化和反序列化JSONMessagePackProtoBuffer小结:JSON 是纯文本,容易阅读,方便编辑,适用性最广;MessagePack 是二进制,小巧高效,在开源界接受程度比较高;ProtoBuffer 是工业级的数据格式,注重安全和性能,多用在大公司的商业产品里。序列化和反序列化序列化,就是把内存里“活的对象”转换成静止的字节序列,便于存储和网络传输;而反序列化则是反向操作,从静止的字节序列重新构建出内存里可用的对象。接下来,我就和你介绍三种既简单又高效的数据原创 2020-07-10 17:37:17 · 3567 阅读 · 1 评论 -
C++之多线程和并发
文章目录什么是并发,多线程?认识线程和多线程什么是并发,多线程?通俗地说,“并发”是指在一个时间段里有多个操作在同时进行,与“多线程”并不是一回事。并发有很多种实现方式,而多线程只是其中最常用的一种手段。不过,因为多线程已经有了很多年的实际应用,也有很多研究成果、应用模式和成熟的软硬件支持,所以,对这两者的区分一般也不太严格,下面我主要来谈多线程。认识线程和多线程要掌握多线程,就要先了解线程(thread)。线程的概念可以分成好几个层次,从 CPU、操作系统等不同的角度看,它的定义也不同。今天,转载 2020-07-10 14:20:43 · 1304 阅读 · 0 评论 -
C++之C++算法
文章目录认识迭代器手写循环的替代品排序算法查找算法算法是专门操作容器的函数,是一种“智能 for 循环”,它的最佳搭档是 lambda 表达式;算法通过迭代器来间接操作容器,使用两个端点指定操作范围,迭代器决定了算法的能力;for_each 算法是 for 的替代品,以函数式编程替代了面向过程编程;有多种排序算法,最基本的是 sort,但应该根据实际情况选择其他更合适的算法,避免浪费;在已序容器上可以执行二分查找,应该使用的算法是 lower_bound;list/set/map 提供了等价的转载 2020-07-09 19:34:54 · 843 阅读 · 0 评论 -
C++之容器
文章目录容器的通用特性容器的具体特性顺序容器按照存储结构,这 5 种容器又可以再细分成两组。优缺点有序容器无序容器重点:容器其实就是一种数据结构;用来存储数据的容器,其实就是 C++ 对数据结构的抽象和封装。标准容器可以分为三大类,即顺序容器、有序容器和无序容器;所有容器中最优先选择的应该是 array 和 vector,它们的速度最快,开销最低;list 是链表结构,插入删除的效率高,但查找效率低;有序容器是红黑树结构,对 key 自动排序,查找效率高,但有插入成本;无序容器是散列表结构,原创 2020-07-09 18:27:03 · 1130 阅读 · 1 评论 -
C++之string
文章目录原始字符串字符串转换函数正则表达式简单小结一下今天的内容:C++ 支持多种字符类型,常用的 string 其实是模板类 basic_string 的特化形式;目前 C++ 对 Unicode 的支持还不太完善,建议尽量避开国际化和编码转化,不要“自讨苦吃”;应当把 string 视为一个完整的字符串来操作,不要把它当成容器来使用;字面量后缀“s”表示字符串类,可以用来自动推导出 string 类型;原始字符串不会转义,是字符串的原始形态,适合在代码里写复杂的文本;处理文本应当使用正则原创 2020-07-09 11:13:11 · 117 阅读 · 0 评论 -
c++之lambda函数式编程
文章目录认识 lambda使用Lambda函数的好处使用 lambda 的注意事项2.lambda 的变量捕获3.泛型的 lambda关键词:闭包;总结:形式 auto f1 = [](){}; // 相当于空函数,什么也不做可以匿名使用vector<int> v = {3, 1, 8, 5, 0}; // 标准容器cout << *find_if(begin(v), end(v), // 标准库里的查找算法 [](int x)原创 2020-07-09 10:12:44 · 534 阅读 · 0 评论 -
C++之异常处理(如何利用异常)
文章目录为什么要有异常?异常的用法和使用方式为什么要有异常?归根到底,异常只是 C++ 为了处理错误而提出的一种解决方案,当然也不会是唯一的一种。在 C++ 之前,处理异常的基本手段是“错误码”。函数执行后,需要检查返回值或者全局的 errno,看是否正常,如果出错了,就执行另外一段代码处理错误:int n = read_data(fd, ...); // 读取数据if (n == 0) { ... // 返回值不太对,适当处理}if (e转载 2020-07-09 09:22:22 · 452 阅读 · 0 评论 -
C++之智能指针 unique_ptr 和 shared_ptr
文章目录一、unique_ptrC++指针没有只能算是一个小垃圾回收站,因为java,go都有一个专门的垃圾回收机制,无用指针会直接回收,C++只能通过析构函数等自己写,释放无用指针,累。智能指针就是代替你来干这些“脏活累活”的。它完全实践了 RAII,包装了裸指针,而且因为重载了 * 和 -> 操作符,用起来和原始指针一模一样。不仅如此,它还综合考虑了很多现实的应用场景,能够自动适应各种复杂的情况,防止误用指针导致的隐患,非常“聪明”,所以被称为“智能指针”。常用的有两种智能指针,分别是 u原创 2020-07-08 21:05:53 · 605 阅读 · 0 评论 -
C++之引用&
文章目录C++ 引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。C++ 引用 vs 指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。...原创 2020-07-08 19:53:49 · 75 阅读 · 0 评论 -
C++之const和volatile
文章目录一、constconst基本用法与类相关的 const 用法关键字 mutable在看const的内容之前 大家要记住一件事,我总结所有的形式,那就是const离谁最近,它是针对谁的。比如const int * p = &name;那么它针对的就是int,所以*p = 10;就是错误操作而 p = &class;就是正确操作而int* const p = &name;它针对的就是p ;所以 p = &name就是错误操作;而 *p = 10就是正确操作原创 2020-07-08 19:34:04 · 918 阅读 · 1 评论 -
C++之unordered_map使用从浅入深
文章目录一、简介二、插入(添加)键值对三、取值四、判空五、容量六、删除七、清空八、交换九、顺序比较十、查找十一、迭代器十二、遍历一、简介unordered_map是一种无序映射,key值是无序的,内部结构使用的是哈希表,存储的是<key, value>键值对,每次存储的都是一对一对的,而在查询的时候 只能通过key是否存在进行查找,不能同过value的值进行查找unordered_map内部是用哈希表实现,通过特殊的函数把Key值映射到哈希表中的一个位置来访问记录,查找时间复杂度可达到O(原创 2020-07-07 13:56:18 · 2017 阅读 · 0 评论 -
c++中vector动态数组用法
文章目录一、定义及初始化二、赋值(assign)三、获取长度(size)四、改变大小(resize)五、数组访问六、添加元素(push_back、insert)七、删除元素(pop_back、erase、remove)八、交换和反转(swap、reverse)九、排序(sort)十、清除和空判断(clear、empty)本文以int类型为例,其他类型大同小异使用vector数组时,需包含< vector>头文件同一功能中的不同函数独立编程,即调用后一函数时前一函数运行结果复原。(已用空行隔转载 2020-05-27 10:12:01 · 1191 阅读 · 0 评论 -
C++之类和对象
给大家讲解下我学习C++的经验;那就是不要看太多理论之后再去实践,有人觉得不懂不就应该先看会才行吗,不不不,编程是门实践课,曾经我的导师跟我说这的知识你在书本上是看不会的,当你动手操作才能学会,我实际学起来才发现导师说的非常对。出错了,按照错误去学习,该怎么写比直接看定义好太多太多(当然不是不让你看,是你只需要看一个框架,具体的细节你要在错误中获取)就说类,网上书上知识点很多,那我就直接跟大家说你该怎么写,该注意什么。(之后的学习过程我还会补充)通用结构从下面的结构上你要看出几个点,第一个点就是原创 2020-05-21 10:18:22 · 187 阅读 · 0 评论