STL容器之vector基本操作

目录

vector基本操作

vector构造函数

 vector的遍历操作

1.重载[ ]进行遍历。

2.使用迭代器进行遍历。

3.使用范围for循环进行遍历。

4.使用at成员函数进行遍历 。

vector空间增长

1.size:获取当前元素的个数。

2.capacity:获取能存储的元素的个数。

3.empty:判断是否为空。

4.resize:改变size和capacity。

5.reserve:改变capacity。

vector增删查改

1.push_back:尾插。

2.pop_back:尾删。

 3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。

 4.insert,在某一位置插入元素。

5.erase,删除某一位置的元素或者删除全部的元素。

6.clear,清除所有的元素,与erase删除所有的元素功能类似。


在前几期我们学习了STL容器中的string类,string类其实可以理解为是一个数组,但是数组的每个元素只能存放字符。从本期开始,我们将学习C++中的下一个容器vector,vector也可以理解是一个数组,每个元素的类型是可以自己定义的。

vector基本操作

vector构造函数

1.全缺省的构造函数:

2.可以指定元素和个数进行初始化

3.拷贝构造函数

4.使用迭代器区间进行初始化构造 

 代码如下:

void test1()
{
	vector<int> v;
	vector<int> v1(10, 5);
	vector<int> v2(v1);
	vector<int> v3(v2.begin(), v2.end());
}

截图如下:

 

 vector的遍历操作

1.重载[ ]进行遍历。

代码如下:

vector<int> v3(v2.begin(), v2.end());
	//重载[]进行遍历
	for (size_t i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << " ";
	}

截图如下:

2.使用迭代器进行遍历。

代码如下:

//使用迭代器进行遍历
	vector<int>::iterator it = v3.begin();
	while (it != v3.end())
	{
		cout << *it << " ";
		it++;
	}

截图如下:

注意:反向迭代器的使用和string类的反向迭代器使用方法类似,迭代器++即可。 

3.使用范围for循环进行遍历。

代码如下:

//范围for循环,本质其实就是迭代器进行遍历
	for (auto e : v3)
	{
		cout << e << " ";
	}

截图如下:

4.使用at成员函数进行遍历 。

代码如下:

//使用at成员函数进行遍历
	for (int i = 0; i < v3.size(); i++)
	{
		cout << v3.at(i) << " ";
	}

截图如下: 

vector空间增长

1.size:获取当前元素的个数。

代码如下:

vector<int> v1(10, 3);
cout << v1.size() << " ";

截图如下:
 

2.capacity:获取能存储的元素的个数。

代码如下:

vector<int> v1(10, 3);
cout << v1.capacity() << " ";

截图如下:

3.empty:判断是否为空。

代码如下:

vector<int> v1(10, 3);
cout << v1.empty() << " ";

截图如下:

4.resize:改变size和capacity。

代码如下:

vector<int> v(10, 3);
v.resize(20);

截图如下: 

resize之后的空间如果大于原来的空间,则进行扩容。

扩容之后:

 

resize会对扩容的空间进行初始化。 

如果resize之后的空间小于原来的空间,不会进行缩容,但是会删掉原来的元素。

代码如下:

vector<int> v(10, 3);
v.resize(5);

截图如下:

我们发现知识size的大小变化,容量capacity并没有发生变化。

5.reserve:改变capacity。

如果reserve之后的空间大小大于原来的空间大小。则进行扩容。

代码如下:

vector<int> v2(5, 3);
v2.reserve(10);

截图如下:

size不会改变,只是改变了容量capacity。

如果reserve之后的空间小于之前的空间,不会发生任何变化,capacity和size都不会发生变化。

代码如下:

vector<int> v3(5, 3);
v3.reserve(2);

截图如下:

可见,reserve只能用于扩容。resize也用于扩容,也可以删除容器中的元素。

vector增删查改

1.push_back:尾插。

 代码如下:

vector<int> v3(5, 3);
v3.push_back(4);

截图如下:

2.pop_back:尾删。

代码如下:

vector<int> v3(5, 3);
v3.push_back(4);
v3.pop_back();

截图如下:

         

 3.find:查找,这个函数不是vector类中的成员函数,而是算法模块中的函数。

如果查找到了返回的是当前位置的迭代器,如果没有查找到,返回的是最后一个元素位置的下一个位置的迭代器。

代码如下:

	vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
	}

 截图如下:

 4.insert,在某一位置插入元素。

 代码如下:

    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	if (it != v3.end())
	{
		cout << "找到了!" << endl;
		v3.insert(it, 6);
	}

截图如下:

注意:insert函数的使用如过要往某一位置插入元素,应该传这个位置的迭代器。

5.erase,删除某一位置的元素或者删除全部的元素。

注意,也应该传当前位置的迭代器或者整个容器的迭代器区间。

删除某一位置元素: 

代码如下:

    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it);

截图如下: 

删除全部元素:

代码如下:

	vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	v3.erase(v3.begin(), v3.end());

截图如下:

 

6.clear,清除所有的元素,与erase删除所有的元素功能类似。

代码如下:

    vector<int> v3(5, 3);
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(5);
	vector<int>::iterator it = find(v3.begin(),v3.end(),5);
	v3.erase(it);
	v3.clear();

截图如下:

以上便是vector的重点基本操作,与string的函数是类似的,一通则百通。

本期内容到此结束^_^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/301725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小型洗衣机什么牌子好又便宜?实用的小型洗衣机测评

随着近几年大家对于生活健康都有了更高的要求&#xff0c;迷你内衣裤洗衣机逐渐进入了大家的视野&#xff0c;并且在日常生活中所适用的人群也是比较的广泛。很多研究调查表明普通的手洗内衣裤没有办法完全清除细菌&#xff0c;而机洗能够去除绝大部分细菌。但是机洗对于洗衣机…

1.3号io网络

文件IO 1.文件IO是基于系统调用 2.程序每进行一次系统调用&#xff0c;就会从用户空间向内核空间进行一次切换&#xff0c;执行效率较慢 3.目的&#xff1a;由于后期进程间通信&#xff0c;如管道、套接字通信&#xff0c;都使用的是文件IO&#xff0c;所以引入文件IO操作的…

Docker安装Centos8系统

引言&#xff1a;最小安装版Centos8系统安装docker软件安装记录 官网安装教程&#xff1a;https://dockerdocs.cn/engine/install/centos/index.html 操作系统镜像版本 CentOS-Stream-8-x86_64-latest-boot.iso 第一步&#xff1a;更新yum yum -y update第二步&#xff1a;…

大模型学习之书生·浦语大模型2——趣味Demo

文章目录 Demo效果目录大模型及InternLM模型介绍InterLM-Chat-7B智能对话DemoLagent智能体工具调用Demo浦语灵笔图文创作理解Demo通用环境配置实践智能对话Demo1 创建开发机2 进入开发机并创建环境及安装依赖3 模型下载4 代码准备5 终端运行6 web demo运行 Lagent智能体工具调用…

静态关键字:static

static的作用 static是静态的意思&#xff0c;可以修饰成员变量和成员方法。 static修饰成员变量表示该成员变量只在内存中只存储一份&#xff0c;可以被共享访问、修改。 成员变量 分为2类 静态成员变量&#xff08;有static修饰&#xff0c;属于类&#xff0c;内存中加载…

INT201 形式语言与自动机笔记(上)

Lec1 Overview Alphabet and String 字母表与字符串 Alphabet&#xff08;字母表&#xff09; a finite, nonempty set ∑ of symbols. String (word) – a finite sequence of symbols from the alphabet e.g ∑ {a, b}, then abab, aaaabbba are strings on ∑ ε Em…

利用人工智能和机器人技术实现复杂的自动化任务!

这篇mylangrobot项目由neka-nat创建&#xff0c;本文已获得作者Shirokuma授权进行编辑和转载。 https://twitter.com/neka_nat GitHub-mylangrobot &#xff1a;GitHub - neka-nat/mylangrobot: Language instructions to mycobot using GPT-4V 引言 本项目创建了一个使用GPT-4…

Prometheus实战篇:Prometheus监控rabbitmq

Prometheus实战篇:Prometheus监控rabbitmq 准备环境 docker-compose安装rabbitmq 这里注意rabbitmq需要暴露2个端口 docker-compose.yaml version: 3 services:rabbitmq:image: rabbitmq:3.7.15-managementcontainer_name: rabbitmqrestart: alwaysvolumes:- /data/rabbitmq…

漏洞复现--金蝶云星空反序列化远程代码执行

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

ChatGPT,革新未来,颠覆你的智能想象!

大家好我是在看&#xff0c;记录普通人学习探索AI之路。 你是否曾渴望对话的边界无限拓宽&#xff1f;是否期待科技力量重塑生活日常&#xff1f;ChatGPT&#xff0c;就是那个引领时代潮流、解锁未来智能生活的关键钥匙&#xff01;它不仅仅是一个技术名词&#xff0c;更是新一…

看图识熊(四)

概述 人工智能已经快要进入应用的高峰期了&#xff0c;但并不需要每个人都学习算法、建模。对于程序员来说&#xff0c;应该先从自己会的方向入手&#xff0c;学习如何应用AI来解决问题&#xff0c;开发应用。 本文将带着大家动手&#xff0c;从头做一个看图识熊的应用&#…

rk3566 armbian修复usb2.0并挂载U盘

文章目录 usb接口修复一 执行命令二 修改rk3566-panther-x2.dts⽂件三 查看是否识别 U盘格式化、挂载一 U盘格式化1.1 查看U盘1.2 查看U盘文件系统类型1.3 格式化为ext4系统 二 挂载U盘2.1 手动挂载2.2 自动挂载&#xff08;可选&#xff09; usb接口修复 一 执行命令 将位于…

1.69寸SPI接口240*280TFT液晶显示模块使用硬件SPI,并提高全屏刷新率的方法探讨

1.69寸SPI接口240*280TFT液晶显示模块&#xff0c;卖家提供了GPIO模拟SPI功能&#xff0c;我移植到了freertos&#xff0c;并点亮了屏幕&#xff0c;接下来是进行硬件SPI的程序修改&#xff1a; 上次还讲到了关于CS管脚的选通信号&#xff0c;再GPIO口的初始化的时候设置为高电…

年度盘点 | 信捷科技2023年的精彩瞬间

岁序更替&#xff0c;华章日新 与你同行的每一天&#xff0c;我们写下了无数回忆 我们一起穿越城市&#xff0c;畅享便捷 看到了“村超”的精彩 聆听了路边音乐节的热闹 见证了贵阳步入轨道交通“线网时代” …… 我们一起携手并进 让每一次出行都成为双向奔赴的可能 …

抖音矩阵系统源码开发

抖音作为一款流行的短视频分享平台&#xff0c;每天吸引着数以亿计的用户&#xff0c;在全球范围内广受欢迎。为了支持如此庞大的用户群体&#xff0c;抖音必须依靠强大的矩阵系统来支撑其稳定的运行。下面将介绍抖音矩阵系统的源码开发。 抖音矩阵系统源码开发主要有以下几个…

振弦采集仪在桥梁结构监测中的应用研究

振弦采集仪在桥梁结构监测中的应用研究 振弦采集仪在桥梁结构监测中的应用研究是指利用振弦采集仪对桥梁结构进行监测和数据采集的研究。振弦采集仪是一种能够实时监测桥梁结构振动情况的设备&#xff0c;通过采集桥梁上的振弦传感器获取振动数据&#xff0c;并将数据传输到监…

vue3+vite +element plus日历date picker中文显示

项目情况 element-plus 默认是英文模式&#xff0c;需要中文模式的话需要设置一下&#xff1a; 项目框架&#xff08;vue3&#xff09;&#xff1a;vite JS element-plus 版本&#xff1a;&#xff08;注意版本兼容&#xff0c;element plus 较低版本&#xff1a;1.xx.xx&a…

4.vue学习(21-25)

文章目录 21.天气案例-监视属性引入22.监视属性23.深度监视24 监视的简写25 监视属性对比计算属性 21.天气案例-监视属性引入 效果&#xff1a;点击按钮&#xff0c;切换凉爽为炎热 vscode 开发vue的插件;vue 3 snippets 初步实现方式。计算属性&#xff1a; 案例中的坑&#…

山西电力市场日前价格预测【2024-01-09】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-09&#xff09;山西电力市场全天平均日前电价为314.92元/MWh。其中&#xff0c;最高日前电价为593.66元/MWh&#xff0c;预计出现在18:15。最低日前电价为54.95元/MWh&#xff0c;预计出…
最新文章