随笔分类 -  C++

摘要:这一期主要讲一些工具和库,感觉不是很重要,随便看看就行 编译器 MSVC Clang GCC 格式化工具:clang-format 代码检查工具:clang-tidy 排错工具:Valgrind、nvwa::debug_new,这俩可以检测内存泄露 处理数据类型变化和错误 optional opti 阅读全文
posted @ 2022-08-12 15:34 Destiny233 阅读(65) 评论(0) 推荐(0) 编辑
摘要:函数对象 c++98中的函数对象:重载()运算符 struct Add { Add(int n): n_(n){} int operator()(x) const { return x + n_; } private: int n_; } Lambda表达式 auto add_2 = [](int 阅读全文
posted @ 2022-08-10 19:54 Destiny233 阅读(39) 评论(0) 推荐(0) 编辑
摘要:Unicode ASCII:美国信息交换标准代码 Windows扩展以及各种乱七八糟的扩展:ISO-xxx等 Unicode 0x0~0x10FFFF一共 UTF-32:编码直接映射 UTF-16: UTF-8:1~4个字节变长 C++对Unicode的支持 c++11引入了char16_t cha 阅读全文
posted @ 2022-08-09 19:38 Destiny233 阅读(84) 评论(0) 推荐(0) 编辑
摘要:第一讲,一条SQL查询语句是如何执行的 select * from T where ID=10 MySQL可以分成Server层和存储引擎两个部分 Server层 引擎层:InnoDB,MyISAM,Memory 连接器:负责与客户端建立连接 查询缓存:如果某个语句查过了,就直接返回(不建议使用) 阅读全文
posted @ 2022-08-08 22:00 Destiny233 阅读(55) 评论(0) 推荐(0) 编辑
摘要:异常 异常安全:当发生异常时,没有资源泄露,系统也不会处于不一致状态 如果不知道是否使用异常,那就是该用。 直接throw会导致内存泄漏,才会使用try catch 在大部分情况下,提供了强异常保证 迭代器 迭代器不是一种类型,而是一种类型要求。 迭代器要求支持*,++,==,!=运算符 输入迭代器 阅读全文
posted @ 2022-08-07 15:08 Destiny233 阅读(62) 评论(0) 推荐(0) 编辑
摘要:堆、栈和RAII 这一讲主要说的是内存管理。C++中主要的内存管理有 栈上内存交给编译器管理 堆上内存需要用户自己管理 栈上内存分配很简单,移动几个指针就行了。 RAII 以下几种情况,就不能使用栈上的空间的了,必须用户自己管理内存。 对象很大 对象在编译时候不确定 对象的生命周期超过了函数 RAI 阅读全文
posted @ 2022-08-06 16:25 Destiny233 阅读(166) 评论(0) 推荐(0) 编辑
摘要:函数对象 函数对象就是重载了()运算符的对象,这个对象可以像函数指针一样被调用。 函数对象主要用作算法的参数。很多算法提供了一个函数对象的参数,让用户自定义某些操作。 但实际上c++11出的functional中的函数对象更多是作为回调使用。 书里有些东西过时了,在C++20中很多都干掉了,这里就不 阅读全文
posted @ 2022-08-05 12:04 Destiny233 阅读(36) 评论(0) 推荐(0) 编辑
摘要:set算法 set有4个算法,交集,并集,补集和对称差集。这四个不能用于unordered_set系列的,只能接受set和multiset。 这四个方法都有两个版本,其中第二个版本可以自定义"<"比较符。我们只讨论第一个版本。 set_union 两个集合求并集。参数是两个区间和一个保存结果的beg 阅读全文
posted @ 2022-08-04 12:04 Destiny233 阅读(24) 评论(0) 推荐(0) 编辑
摘要:STL中的算法写在这两个头文件中 algorithm numeric 这里只列老版本的C++03的算法,新版本的算法可以在cppreference上看看(太多了),上面的内容比书上更清晰,且全面。 所有的算法都是操作在迭代器控制的一个范围之内的。 算法可以分成质变与非质变两种。前者会修改区间中的元素 阅读全文
posted @ 2022-08-03 16:01 Destiny233 阅读(34) 评论(0) 推荐(0) 编辑
摘要:在STL中,关联容器核心的只有两个:set和map,与之相关的还有multi和unordered。组合起来一共就是8个 底层实现 STL中,关联容器的实现有两个数据结构,红黑树和hash表。 红黑树 红黑树是一种平衡二叉树,他有这些特点 树上所有的节点都带有颜色,要么红色要么黑色。 根节点是黑色 根 阅读全文
posted @ 2022-08-02 15:21 Destiny233 阅读(34) 评论(0) 推荐(0) 编辑
摘要:deque deque是双端队列。 它可以操作头和尾部的元素。 deque内部是一块一块连续存储空间链成的。也就是说,部分空间是连续的。 deque不像vector那样,它没有capacity的概念。 deque的底层结构 deque底层是一段一段的连续存储空间链接起来的。每一段连续的空间是一块缓冲 阅读全文
posted @ 2022-07-31 17:09 Destiny233 阅读(24) 评论(0) 推荐(0) 编辑
摘要:容器就是保存数据的数据结构。常用的数据结构有:数组,链表,树,哈希表,堆,栈,队列,集合等。这些数据结构可以分为序列式和关联式。 STL基本都有这些数据结构的实现(以容器的方式) 序列式容器 array 数组 vector 动态数组 list 双向链表 forward_list 单链表 deque 阅读全文
posted @ 2022-07-30 15:34 Destiny233 阅读(35) 评论(0) 推荐(0) 编辑
摘要:迭代器是一种按顺序访问容器的对象,却又不暴露容器内部设计。可以把他简单的理解为一种指针,指向了容器中的某个元素。所以迭代器需要支持解引用和取成员操作符重载 T& operator*() const; T* operator->() const; 在STL种,算法只与迭代器交互,不直接操作容器。比如f 阅读全文
posted @ 2022-07-28 23:19 Destiny233 阅读(52) 评论(0) 推荐(0) 编辑
摘要:配置器的接口 allocate:分配内存 deallocate:释放内存 construct:在已申请的内存上构造对象 destroy:析构对象 address:取某个对象的地址 const_address:常版本地址 max_size:返回可申请的最大空间 标准库的分配器 std::allocat 阅读全文
posted @ 2022-07-26 19:55 Destiny233 阅读(93) 评论(0) 推荐(0) 编辑
摘要:假设我们写了一个有理数类,并支持其中的*重载 class Rational { public: Rational(int numerator = 0, int denominator = 1); int numerator() const; int denominator() const; cons 阅读全文
posted @ 2021-07-04 16:30 Destiny233 阅读(47) 评论(0) 推荐(0) 编辑
摘要:RAII(Resource Acquisition is Initialization)意思是资源取得的时间是初始化时机。怎么理解呢,比如说我们new出了一块动态内存,就应该立刻放入智能指针中;申请了一个数据库链接,就应该立刻放入数据库管理对象中。因为我们需要这些资源管理对象帮助我们自动释放这些资源 阅读全文
posted @ 2021-07-04 16:00 Destiny233 阅读(102) 评论(0) 推荐(0) 编辑
摘要:复制对象会用到两个函数,我们将下面两个函数统称为复制函数。 复制构造函数 赋值运算符 编译器不会提醒你忘了复制哪些东西 如果我们自己没有实现,则编译器会帮我们实现。编译器的实现会复制所有的 成员变量。 如果我们自己实现了,也一定要像编译器一样复制所有的成员变量。但如果你忘了某一个,编译器也不会提醒你 阅读全文
posted @ 2021-07-04 15:34 Destiny233 阅读(47) 评论(0) 推荐(0) 编辑
摘要:接口需要传什么参数 例如一个日期类 class Date { public: Date(int month, int day, int year); }; 年月日是三个必要数据,不同国家年月日的排列不同。所以这个是有歧义的。解决方法是设计年月日三个类,并且不让隐式转型。 class Month{ p 阅读全文
posted @ 2021-07-03 19:19 Destiny233 阅读(28) 评论(0) 推荐(0) 编辑
摘要:看下面这个例子 class Rational{ public: Rational(int numerator = 0, int denominator = 1); private: int n, d; friend const Rational operator* (const Rational& 阅读全文
posted @ 2021-07-03 19:17 Destiny233 阅读(31) 评论(0) 推荐(0) 编辑
摘要:考虑下面这个列子,我们定义了一个浏览器类。现在我们希望清理这个浏览器,一共需要清理三个东西,所以有3个成员变量。现在我们想将这三个东西放在一个函数里。有两种解决方法,一个是放在成员函数里,一个是放在普通函数里。哪个封装性更好? class WebBrowser{ public: void clear 阅读全文
posted @ 2021-07-03 17:09 Destiny233 阅读(95) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示