基于Linux的C++学习——动态数组容器vector

一、小技巧的使用

1、sort命令

sort是Linux下的一个命令,对于Linux的一些命令可以利用"命令 --help"来查看一些用法。例如我们新创建一个文本文档test.txt,里面输入下面的内容。

输入sort命令进行排序,输出结果如下图所示。

下面将10和11也填入test.txt文本文档中

再进行编译运行后结果如下图所示,所以在这可以看出来,有点儿按照字符串去排的意思,因为从字符串的角度上来讲,因为首字母是1小于3

可以再追加几个进行测试,如下图所示。

排序的结果如下图所示,,是按照字符串的首字母顺序方式去排的。

那么这个命令有什么作用呢,它可以结合另外的一些命令去做一些比较复杂的事,比如说首先将test.txt拷贝一份,为test1.txt,修改里面的内容如下图所示。

可以用cat命令将两个文件的内容打印出来

之后再用sort命令进行排序,将两个文件合并到一起进行排序

还可以加一些约束显示,例如将两个文件中独有的部分打印出来

2、tmux的使用

首先检查是否已经有tmux,如下图所示,说明没有安装

首先输入下面的命令

之后再输入下面的命令进行安装

再输入tmux命令

回车后进入下面的界面

下面进行简单的测试使用,可以用来拆分窗口,例如Ctrl+B→松手→Shift+引号

Ctrl+B→松手→o,可以进行窗口切换

Ctrl+B→松手→%,可以进行再次分割

二、动态数组容器vector

1、基本使用

定义时需要引入头文件#include<vector>,基本格式如下,<>这个符号涉及到后续的模板的概念。

vector<类型> 变量名称;

如果前面不加命名空间using namespace std;,那么就要采用下面的这种输入方式。

vector也可以存放自定义类型,如下图所示。

vector也可以存放结构体类型,如下图所示。

vector也可以存放指针类型,如下图所示。

2、初始化

(1)初始化具体数值

使用4个5来初始化vector,如下图所示。

(2)初始化成某个数组

(3)某些特定场景创建vector

已经有了某个vector,下面想新创建一个vector,但是这个vector用前面vector的一部分信息,下面利用v2来创建v3,代码如下图所示,用v2的迭代器区间来初始化v3。

有的时候不需要整个数组,只需要一部分,这个时候可以进行偏移,如下图所示,这个时候就是起始地址向后挪两个进行打印。

并且第二个元素也没必要一定使用end,如下图所示,可以理解为是两个指针类型的参数,可以进行偏移。

(4)vector与构造函数

现在的问题是这个构造函数是了100次,还是调用了1次被赋值为100份。

如下图所示,所以构造函数只被调用了一次。

而下面这种方式则是对构造函数调用了100次

所以对与以上两种方式调用构造函数的次数是不一样的,如果构造函数很复杂需要计算很久,那么就采用第一种方式进行初始化。

(5)创建二维vector

下面演示创建一个20行100列且元素都为-1的二维vector

三、vector使用

1、遍历

下面代码是可以打印出10~19

2、迭代器

如下所示利用地址偏移思想来进行取值来遍历,但是iterator与地址还是有差异的。

3、auto

下面来解释一下下面的代码,:指的是在后面的数组中进行变量,auto通过后面的数组进行推断,&表示引用,而不是拷贝。

4、二维vector

下面这种做法是一开始定义的时候就开辟空间

下面这种方式是先定义后续再开辟空间,首先在定义完二维数组后开辟出5行的空间,之后再在每一行中开辟10列的空间。

其实可以实现每一行元素不一样多的情形,就是说,没必要一定是一个矩阵,如下图所示,

四、vector相关函数

1、sort函数

需要引入头文件#include<algorithm>,下面进行打印,0~9,并进行排序

修改程序vector为从9到0,之后再进行排序输出,说明排序生效了

以上涉及到的排序都是从小到大排序,下面来修改代码实现从大到小排序

2、push_back函数

push_back函数就是将已有的元素追加到vector后面去

3、resize函数

顾名思义resize就是重新分配vector的大小

以特定的数据对vector数据进行初始化

4、insert函数

其实也就是将两个vector进行合并下面实现将v2后接入v1

5、find函数

查找某个元素是否在vector内,下图程序是通过find函数查找元素4的位置

下面完善一下程序,在vector中查找100这个元素,由于不包含这个元素,所以没有

6、clear函数

清空所有元素

7、empty函数

返回一个bool值来判断vector是否为空

8、front函数和back函数

front函数返回vector首个元素,back函数返回vector最后一个元素

五、其他使用

1、自定义排序

比如说结构体A可以理解为某二维坐标,现在想要寻求横纵坐标加和越大越好,就是将两个和较大的排在前面

还可以修改其他规则,不管纵坐标,只看横坐标进行排序

还可以采用下面这种方式去进行自定义排序

2、转指针

要把vector转为一个指针只需要对首元素取地址即可,首先定义一个10个10的vector,之后取周哥元素的地址,遍历读取,观察取值是否一致。

相关推荐
小镇敲码人3 小时前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
萧鼎3 小时前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
AI视觉网奇3 小时前
3d数字人 ue blender 绑定衣服对齐 2026
学习·ue5
Nan_Shu_6143 小时前
学习: Blender 基础篇
学习·blender
Anastasiozzzz4 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步4 小时前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
Hello_Embed4 小时前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
机器视觉的发动机4 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经4 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
生活很暖很治愈4 小时前
Linux——孤儿进程&进程调度&大O(1)调度
linux·服务器·ubuntu