STL之vector

目录

vector的定义和特性

vector的定义和结构非常简单,它由以下几个重要的部分组成:

vector的常用函数

vector排序去重

排序

去重

代码示例


vector的定义和特性

在c++中,vector是一个动态数组容器,可以存储一系列相同类型的元素。它是标准库<vector>中定义的模板类。

vector的定义和结构非常简单,它由以下几个重要的部分组成:

模板类声明:vector是一个模板类,因此在使用之前需要包含头文件<vector>。声明一个vector对象的通用语法如下:        std::vector<T>vec;        这里的T是要存储在vector中的数据类型。

容器大小:vector是一个动态数组,可以根据需要自动调整大小。它会根据元素的数量动态分配空间。

元素访问:可以通过索引来访问vector中的元素。索引从0开始,最后一个元素的索引时size()-1.可以使用[]运算符或at()函数来访问元素。

元素的添加和删除:可以使用push_back()函数在vector的末尾添加元素,使用pop_back函数删除末尾的元素。还可以使用insert()函数在指定位置插入元素,使用erase()函数删除指定位置的元素。

容器的大小管理:可以使用size()函数获取vector中元素的数量,使用empty()函数检查vector是否为空。还可以使用resize()函数调整vector的大小。

迭代器:vector提供了迭代器,可以用于遍历容器中的元素。可以使用begin()函数获取指向第一个元素的迭代器。使用end()函数获取指向最后一个元素之后位置的迭代器。

vector的常用函数

push_back():将元素添加到vector末尾

pop_back():删除vector末尾的元素        PS:一定要保证vector非空

begin()和end():返回指向第一个元素和最后一个元素之后位置的迭代器

vector排序去重

排序

要对vector排序,可以使用标准库中的std::sort函数,该函数位于<algorithm>

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{vector<int>vec = { 5,2,8,9,1 };sort(vec.begin(), vec.end());for (const auto& i : vec){cout << i << " ";}return 0;
}

运行结果:1 2 5 8 9

去重

要去除vector中重复元素,可使用unique函数。该函数位于<algorithm>

首先,排序,以便相同的元素相邻。然后,unique函数将重复的元素移动到vector的末尾,并返回一个指向重复元素的迭代器。最后,可以使用vec.erase函数将重复元素从vector中删除。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{vector<int>vec = { 2,1,3,2,4,1,5,4 };sort(vec.begin(), vec.end());auto last = unique(vec.begin(), vec.end());	vec.erase(last, vec.end());for (const auto& i : vec){cout << i << " ";}return 0;
}

运行结果:1 2 3 4 5

代码示例

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);vector<int>numbers;//向向量中添加元素	numbers.push_back(5);numbers.push_back(2);numbers.push_back(8);numbers.push_back(5);numbers.push_back(1);numbers.push_back(2);numbers.push_back(9);numbers.push_back(8);//打印向量中的元素cout << "原始向量中的元素:";for (const auto& i : numbers){cout << i << ' ';//5 2 8 5 1 2 9 8}cout << endl;//对向量进行排序sort(numbers.begin(), numbers.end());//打印排序后的向量cout << "排序后的向量为:";for (const auto& i : numbers){cout << i << ' ';//1 2 2 5 5 8 8 9}cout << endl;//去除重复元素numbers.erase(unique(numbers.begin(), numbers.end()), numbers.end());//打印去重后的向量cout << "去重后的向量:";for (const auto& i : numbers){cout << i << ' ';//1 2 5 8 9}cout << endl;//向向量中插入元素numbers.insert(numbers.begin() + 2, 3);//1 2 3 5 8 9cout << "插入元素后的向量:";for (const auto& i : numbers){cout << i << ' ';}cout << endl;//删除向量中的某个元素numbers.erase(numbers.begin() + 4);//1 2 3 5 9cout << "删除元素后的向量:";for (const auto& i : numbers){cout << i << ' ';}cout << endl;//检查向量是否为空if (numbers.empty()){cout << "向量为空" << endl;}else{cout << "向量不为空" << endl;}//获取向量的大小cout << "向量的大小:" << numbers.size() << endl;//清空向量numbers.clear();//检查向量是否为空if (numbers.empty()){cout << "向量为空" << endl;}else{cout << "向量不为空" << endl;}return 0;
}

结果:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度解析:接口测试与功能测试的区别,精彩回答震撼心灵

软件测试的细分领域范围广泛。 很多人常常搞不清楚接口测试与功能测试之间的区别。 今天用一篇文章来讲清楚“接口测试与功能测试的区别及内存联系”。 接口测试和功能测试都属于软件测试的细分领域。 更准确的说&#xff0c;软件测试按大的方向分类分别为&#xff1a;功能…

如何用Mac工具制作“苹果高管形象照”

大伙儿最近有没有刷到“苹果高管形象照”风格&#xff0c;详细说来就是&#xff1a; 以苹果官网管理层简介页面中&#xff0c;各位高管形象照为模型&#xff0c;佐以磨皮、美白、高光等修图术&#xff0c;打造的看上去既有事业又有时间有氧的证件照&#xff0c;又称“苹…

对运放设计静态工作电压和求摆幅的理解

MOS的电压关系 在运放设计静态工作电压时要利用vod来确定&#xff0c;已知MOS的VTH&#xff0c;工作在饱和区&#xff0c;再假设管子的Vdsat&#xff0c;根据下式就能由G求S或由S求G&#xff1a; 上述关系可以用来确定电路的所有电压工作点&#xff0c;因为一旦Vod确定&#…

flask框架基本使用

一、使用pycharm创建项目 1.创建项目 2.调整默认终端 3.打开虚拟终端 打开终端可以看出使用的是p1的虚拟机终端了 4.pyCharm小技巧 在flask种输入一个完整并且存在的函数名称或者类明&#xff0c; 然后 Alt 回车&#xff0c;pycharm可以自动导包&#xff0c;不用在手动在代…

Web前端 ---- 【Vue3】Proxy响应式原理

目录 前言 安装Vue3项目 安装 Proxy 语法格式 前言 从本文开始进入vue3的学习。本文介绍vue3中的响应式原理&#xff0c;相较于vue2中通过object.defineProperty&#xff08;vue2中的响应式&#xff09;来实现响应式&#xff0c;vue3中换成了Proxy来进行实现。 安装Vue3项目…

chat-plus部署指南

目录 1.下载代码 2.启动 3.测试 1.下载代码 cd /optwget https://github.com/yangjian102621/chatgpt-plus/archive/refs/tags/v3.2.4.1.tar.gz 2.启动 cd /opt/chatgpt-plus-3.2.4.1/deploydocker-compose up -d 3.测试 管理员地址xxx:8080/admin 账号密码admin/admin1…

百度面经整理(2024最新)

百度 面经1 shiro的组件分布式一致性算法zookeeper那些能参与投票&#xff0c;leader能投票吗&#xff1f;netty零拷贝实现volatile&#xff0c;如何感知到变量变化的redis高可用http如何跨域&#xff1f;tcp如何长链接。http如何操作浏览器缓存。用过消息队列吗&#xff1f;…

二极管选型怎么选?常用参数要熟练~

同学们大家好&#xff0c;今天我们继续学习杨欣的《电子设计从零开始》&#xff0c;这本书从基本原理出发&#xff0c;知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例&#xff0c;可以说是全面系统地介绍了电子设计所需的知识…

[易语言]使用易语言部署工业级人脸检测模型

【框架地址】 https://github.com/ShiqiYu/libfacedetection 【算法介绍】 Libfacedetection是一个开源的计算机视觉库&#xff0c;主要用于实时的人脸检测。它利用深度学习技术&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;实现了高精度的脸部定位…

红日靶场之stack远程桌面控制 个人学习)

我们首先打开webshell工具 然后切换到C盘的www的文件夹下面 然后我们打开MSF工具进行监听 模板 msfconsole 启动MSF工具 然后是 use exploit/multi/handler 使用漏洞辅助模块 set payload windows/meterpreter/reverse_tcp 这是利用漏洞tcp回弹模块 set lhost 192.168.52.…

Selenium自动化测试—设置元素等待

selenium中有三种时间等待&#xff1a; 强制等待&#xff1a;sleep隐式等待&#xff1a;implicitly_wait显示等待&#xff1a;WebDriverWait 1. sleep【文末有配套视频教程和免费的测试资料】 让程序暂停运行一定时间&#xff0c;等待时间到达后继续运行。 使用sleep&#…

SpringMVC文件上传(CommonsMultipartResolver)

以上传一个图片为例 添加依赖 <!--文件上传--> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version> </dependency> 配置文件上传解析器 <…