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

相关推荐
Scott9999HH4 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
2401_841495645 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
Yana.nice5 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
fqbqrr5 小时前
2607C++,soui与安卓
c++·soui
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海5 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117768 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao8 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest