基于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,之后取周哥元素的地址,遍历读取,观察取值是否一致。

相关推荐
木风小助理7 小时前
`mapfile`命令详解:Bash中高效的文本至数组转换工具
开发语言·chrome·bash
Joren的学习记录7 小时前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes
yyy(十一月限定版)7 小时前
初始matlab
开发语言·matlab
LawrenceLan7 小时前
Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字
开发语言·flutter·dart
listhi5207 小时前
基于MATLAB的支持向量机(SVM)医学图像分割方法
开发语言·matlab
嵌入式-老费7 小时前
外壳3D结构设计(学习的方法)
学习
hui函数7 小时前
如何解决 pip install 编译报错 g++: command not found(缺少 C++ 编译器)问题
开发语言·c++·pip
代码游侠7 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
山土成旧客7 小时前
【Python学习打卡-Day40】从“能跑就行”到“工程标准”:PyTorch训练与测试的规范化写法
pytorch·python·学习