怎样学好C++
文章平均质量分 88
半醒半醉日复日,花落花开年复年
这个作者很懒,什么都没留下…
展开
-
【C++】关于结构体内存对齐的问题
x86:指针是4字节,类A的大小是16,8与16的较小者是8。内存大小为:8 + 16 + 8 + 4 = 36,又因为36不是最大对齐数8的倍数,所以内存向后偏移,大小为 40。x64:指针是8字节,类A大小为24,8与24的较小者是8。内存大小为:8 + 24 + 8 +8 = 48,48刚好是最大对齐数8的倍数,所以内存大小为48。所以说,字节对齐的根本原因其实在于cpu读取内存的效率问题,对齐以后,cpu读取内存的效率会更快。这个字节,相当于读一个int,cpu从内存读取了两次。原创 2023-03-02 09:51:24 · 848 阅读 · 0 评论 -
【C++】产生随机数 rand 和 srand 函数用法详解
在上述代码中,(MAX_VALUE - MIN_VALUE + 1)的值为 9,这是目标范围内整数的个数。余数运算符(%)返回的值是 0〜8 的数字,再用它加上 MIN_VALUE(也就是 10),即可获得 10〜18 的随机数。当使用通过 rand 函数返回的正整数除以6时,余数将是 0〜5 的数字。在 C++ 中,这是通过调用。在上述公式中,minValue 是范围内的最小值,而 maxValue 则是范围内的最大值。这意味着它们具有随机数的表现和属性,但实际上并不是随机的,它们实际上是用算法生成的。原创 2023-02-07 10:57:43 · 1550 阅读 · 0 评论 -
【C++】异常( try / catch / throw)
目录1.C语言传统的处理错误的方式2.C++异常概念3.异常的用法4. 自定义异常体系5.标准库异常体系6.异常的优缺点1.C语言传统的处理错误的方式传统的错误处理机制:终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误C 标准库中setjmp和longjmp组合。这个不是很常用,了解一下实际中C语言基本都是使用返回错误码的方式处理错误,部原创 2022-05-11 18:12:28 · 3714 阅读 · 1 评论 -
【C++11】lambda表达式、右值引用、final和override关键字
lvalue 是“loactor value”的缩写,可意为存储在内存中、有明确存储地址(可寻址)的数据,而 rvalue 译为 “read value”,指的是那些可以提供数据值的数据(不一定可以寻址,例如存储于寄存器中的数据)。当在父类中使用了虚函数的时候,会出现需要在某个子类中对这个虚函数进行重写的情况,当我们重写的时候,一不小心把函数名写错了,但是编译器并不会报错,因为它并不知道你的目的是重写虚函数,而是把它当成了新的函数。我们知道,右值往往是没有名称的,因此要使用它只能借助引用的方式。原创 2022-03-26 23:05:09 · 1399 阅读 · 0 评论 -
【STL】关联式容器:set 与 map
① set容器中所有元素在插入时自动被排序。② set容器和multiset容器属于关联式容器,底层结构用红黑树实现。set容器不允许容器中有重复的元素。multiset容器允许容器中有重复的元素。//set容器排序 class Person {public :int m_Age;class comparePerson //仿函数本质是一个类 {public ://安装年龄 降序 return p1 . m_Age > p2 . m_Age;} };原创 2022-03-06 22:57:47 · 345 阅读 · 0 评论 -
【STL】容器适配器:stack 与 queue 详解
① stack是一种后进先出的容器,它只有一个出口。② 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为。③ 栈中进入数据称为:入栈 push④ 栈中弹出数据称为:出栈 pop① queue是一种先进先出的数据结构,它有两个出口。② 队列容器允许一段新增元素,从另一端移除元素。③ 队列中只有对头和队尾才可以被外界使用,因此队列不允许有遍历行为。④ 队列中进数据称为入队。⑤ 队列中出数据称为出队。原创 2022-03-05 10:22:04 · 288 阅读 · 0 评论 -
【STL】list容器(list常用操作函数、构造函数、赋值和交换、大小操作、插入和删除、数据存取、反转和排序)
① 功能:将数据进行链式存储。② 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。③ 链表的组成:链表由一系列结点组成。④ 结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。⑤ 添加元素,将原指向下一个元素的指针指向新元素即可,新元素指向下一个元素⑥ STL中的链表是一个双向循环链表。[双向]:每一个指针既指向下一个结点的元素,也指向上一个结点的元素。原创 2022-03-03 09:48:09 · 1009 阅读 · 0 评论 -
【STL】deque容器详解(deque常用的操作函数、构造函数、赋值操作、大小操作、插入和删除、数据存取)
(1)功能:双端数组,可以对头端进行插入删除操作,也可以对尾端进行插入和删除操作。vector对于头部的插入效率低,数据量越大,效率越低,例如头部后有十万个数据,则往头部插入一个数据时,十万个数据都需要往后挪一挪才能在头部插入数据。deque相对而言,对头部的插入删除速度会比vector快。vector访问元素时的速度会比deque快,这和两者内部实现有关。原创 2022-03-01 20:36:08 · 5907 阅读 · 2 评论 -
【STL】vector容器详解(vector常用的操作函数、构造函数、赋值操作、容量和大小、插入和删除、数据存取、互换容器、预留空间)
(1)vector容器和数组非常相似,也称为单端数组。(2)vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展。动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。(3)vector容器的迭代器是支持随机访问的迭代器。原创 2022-02-28 17:04:52 · 5012 阅读 · 2 评论 -
【STL】string详解(string类常用的操作函数、构造函数、赋值操作、子符串的拼接、查找和替换、比较、存取、插入和删除、获取)
(1)string是C++风格的字符串,而string本质上是一个类。(2)string 和 char* 区别:①char* 是一个指针② string 是一个类,类内部封装了 char*,管理这个字符串是一个char型容器。(3)string特点:①string类内部封装了很多成员方法, 例如,查找find,拷贝copy,删除delete,替换replace,插入insert。②string管理char* 所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。原创 2022-02-27 13:56:54 · 1121 阅读 · 0 评论