C++容器 vectorvector 是一种可以改变大小的序列容器。
和 array 一样,vector 的元素也是连续存储的,这意味着不仅可以通过迭代器访问元素,还可以使用指向元素的常规指针的偏移量来访问元素,并且效率与 array 相同。但是与 array 不同的是,vector 的大小可以动态改变,其存储由容器自动处理。
vector 在内部使用动态分配的数组存储其元素。插入新元素时,可能需要重新分配该数组以增大其大小,这意味着分配新数组并将所有元素移至该数组。就处理时间而言,这是一项相对昂贵的任务。
所以,vector 可能会分配一些额外的存储空间以适应可能的增长,因此,该容器的...
C++容器 arrayC++ 11 中将数组抽象成了一个模板类array。
array 位于名称空间 std 中,与数组一样, array 的长度是固定的,也使用栈(静态内存分配),而不是自由存储区,因此其效率与数组相同,但更方便,更安全。
零大小的数组是有效的,不应取消引用(成员 front() , back() 和 data() )。
与标准库中的其他容器不同,交换两个数组容器是一种线性操作,涉及单独交换范围内的所有元素,这通常效率较低。另一方面,这允许迭代器访问两个容器中的元素,以保持其原始容器关联。
数组容器的另一个独特功能是可以将它们视为元组对象。
模板参数(Template ...
iterator 与 const_iteratoriterator 与 const_iterator 的作用:遍历容器内的元素,并访问这些元素的值。
iterator 与 const_iterator 的区别:iterator 可以改元素值,但 const_iterator 不可以改元素值。
const_iterator 对象可以用于 const vector 或非 const vector,它自身的值可以改(可以指向其他元素),但不能改写其指向的元素值。
示例:1234567891011vector<int> v = { 0,1,2,3,4,5,6,7 }...
1269. 停在原地的方案数有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处。
每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。
给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数。
由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果。
示例 1:1234567输入:steps = 3, arrLen = 2输出:4解释:3 步后,总共有 4 种不同的方法可以停在索引 0 处。向右,向左,不动不动,向右,向左向右,...
C++标准库(STL)与泛型编程STL 六大部件(Components)
容器(Containers)
分配器(Allocators)
算法(Algorithms)
迭代器(Iterators)
适配器(Adapters)
仿函数(Functors)
容器STL中的容器大体分为
序列容器(Sequence Containers)
关联容器(Associative Containers)
无序容器(Unordered Containers)
STL设计模式OOP(Object-Oriented Programming)和GP(Generic Programming)是STL容器设...
5752. 子数组最小乘积的最大值一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。
比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。
给你一个正整数数组 nums ,请你返回 nums 任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 109 + 7 取余 的结果。
请注意,最小乘积的最大值考虑的是取余操作 之前 的结果。题目保证最小乘积的最大值在 不取余 的情况下可以用 64 位有符号整数 保存。
子数组 定义为一个数组的 连续 部分。
示例 1:1234输入:nums...
5751. 下标对中的最大距离给你两个 非递增 的整数数组 nums1 和 nums2 ,数组下标均 从 0 开始 计数。
下标对 (i, j) 中 0 <= i < nums1.length 且 0 <= j < nums2.length 。如果该下标对同时满足 i <= j 且 nums1[i] <= nums2[j] ,则称之为 有效 下标对,该下标对的 距离 为 j - i 。
返回所有 有效 下标对 (i, j) 中的 最大距离 。如果不存在有效下标对,返回 0 。
一个数组 arr ,如果每个 1 <= i < arr.leng...
5750. 人口最多的年份给你一个二维整数数组 logs ,其中每个 logs[i] = [birthi, deathi] 表示第 i 个人的出生和死亡年份。
年份 x 的 人口 定义为这一年期间活着的人的数目。第 i 个人被计入年份 x 的人口需要满足:x 在闭区间 [birthi, deathi - 1] 内。注意,人不应当计入他们死亡当年的人口中。
返回 人口最多 且 最早 的年份。
示例 1:123输入:logs = [[1993,1999],[2000,2010]]输出:1993解释:人口最多为 1 ,而 1993 是人口为 1 的最早年份。
示例 2:12345输入...
数据链路层1 数据链路层的三个基本问题1.1 封装成帧封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从比特流中识别帧的开始和结束。
首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。此外,首部和尾部还包括许多必要的控制信息。
为了提高帧的传输效率,应当使帧的数据部分长度尽量大于首部和尾部的长度。
最大传输单元 MTU(Maximum Transfer Unit):帧数据部分长度上限。
当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。
控制字符 ...
C++ 面向对象高级编程1、头文件结构1.1 防卫式声明(防止头文件被重复包含)
1.2 前置声明(声明头文件中用到的类和函数)
1.3 类声明: 声明类的函数和变量,部分简单的函数可以在这一部分加以实现
1.4类定义: 实现前面声明的函数
2、访问权限访问权限限定符只用于修饰类的成员变量和成员函数。
访问权限分为三种,分别为public、protected、private。
访问权限
作用
public
可以被所有函数访问
protected
能被本类的函数和子类的函数访问
private
只能被本类的函数访问
2.1 public被public限定符所修饰...