Vector[C++]

文章目录

  • C++中的`std::vector`简介
  • `std::vector`的特点
  • `std::vector`的重要接口用法介绍
    • 1. 初始化
      • vector
    • 2. 添加元素
      • push_back
      • emplace_back
    • 3. 访问元素
      • operator[]
      • back
    • 4. 修改元素
      • operator
    • 5. 遍历
      • 三种,下标,迭代器,范围for
    • 6. 容量和大小
      • size
      • empty
    • 7. 清空和删除
      • clear
      • erase
    • 8. 查找
      • find

C++中的std::vector简介

std::vector是C++标准模板库(STL)中的一种动态数组。它提供了一种可以动态增长和缩减的序列容器。与普通数组相比,std::vector能够自动管理内存,并且可以高效地访问任何元素。

std::vector的特点

  • 头文件:要包含#include <vector>的头文件
  • 动态大小std::vector的大小是动态的,可以在运行时增长和缩减。
  • 随机访问:可以通过索引快速访问任何元素,时间复杂度为O(1)。
  • 自动内存管理:不需要手动分配和释放内存,std::vector会处理这些细节。

std::vector的重要接口用法介绍

1. 初始化

在这里插入图片描述

vector

  • (1)
    空容器构造函数(默认构造函数)构造一个没有元素的空容器
  • (2)
    构造一个包含n个元素的容器。所有元素被初始化为val
  • (3)
    构造一个包含与[first,last]范围相同数量元素的容器(迭代器访问),其中每个元素以相同的顺序从该范围中的对应元素构造
  • (4)
    允许你通过另一个 std::vector 对象来初始化一个新的 std::vector。当你使用这个构造函数时,新创建的 std::vector 将包含与参数 x 相同的元素,即它将是 x 的一个副本。
#include <vector>std::vector<int> vec; // (1)默认初始化,空vector
std::vector<int> vec(5); // (2)初始化为包含5个元素的vector,每个元素初始化为0
std::vector<int> vec(5, 10); // (2)初始化为包含5个元素的vector,每个元素初始化为10int arr[] = { 1, 2, 3, 4, 5 };// (3)假设我们有一个整数数组
std::vector<int> vec(arr, arr + sizeof(arr) / sizeof(arr[0]));// (3)使用模板构造函数从数组创建vectorstd::vector<int> originalVector = {1, 2, 3, 4, 5}; // 创建一个 vector 并初始化一些元素
std::vector<int> copyVector(originalVector);    // (4)使用拷贝构造函数创建一个新的 vector

2. 添加元素

在这里插入图片描述

push_back

  • push_back
    没啥说的尾插一个数或数组
    在这里插入图片描述

emplace_back

  • emplace_back
    在vector的末尾插入一个新元素,就在vector当前的最后一个元素之后。这个新元素是使用args作为其构造函数的参数来就地构造的。

push_backemplace_back的区别:

  • push_back 是将已存在的元素添加到 vector 的末尾。
  • emplace_back 是在 vector 的末尾直接构造一个新元素,这样可以更高效,特别是对于复杂类型的对象。
    而构造一个新的元素可以减少拷贝或者移动提升效率
vec.push_back(1); // 在vector末尾添加元素1
vec.emplace_back(2); // 在vector末尾构造一个新元素

3. 访问元素

在这里插入图片描述

operator[]

  • operator[]
    返回对vector容器中位置n的元素的引用,和string类似说白了就是方括号下标的使用

在这里插入图片描述

back

  • back
    返回对vector中最后一个元素
int first = vec[0]; // 通过索引访问第一个元素
int last = vec.back(); // 返回最后一个元素

4. 修改元素

在这里插入图片描述

operator

  • operator[]
    返回对vector容器中位置n的元素的引用,和string类似说白了就是方括号下标的使用
vec[0] = 100; // 将第一个元素修改为100

5. 遍历

三种,下标,迭代器,范围for

std::vector<int> vec({ 1, 2, 3, 4, 5, 6, 7 });for (int i = 0; i < vec.size(); ++i) 
{std::cout << vec[i] << std::endl;
}auto it = vec.begin();
while (it!=vec.end())
{cout << *it << " ";it++;
}
cout << endl;for (auto &element : vec) 
{std::cout << element << std::endl;
}

6. 容量和大小

在这里插入图片描述

size

  • szie
    返回vector中元素的个数

在这里插入图片描述

empty

  • empty
    返回vector是否为空(即其大小是否为0)
int size = vec.size(); // 返回vector中的元素数量
bool isEmpty = vec.empty(); // 如果vector为空,返回true

7. 清空和删除

clear

clear清空vector中的所有元素,没什么说的

在这里插入图片描述

erase

  • erase
    用于删除容器中的元素。它可以删除指定位置的元素,或者删除一个范围内的元素
vec.clear(); // 清空vector中的所有元素
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(vec.begin() + 2); // 删除第三个元素(索引为2的元素,因为索引从0开始)
iterator erase(iterator first, iterator last);//用迭代器范围删除

8. 查找

find

std::vectorfind 函数有两种重载形式:

  1. 查找单个元素

    iterator find(const value_type& value);
    

    这个函数接受一个值作为参数,它会在 vector 中查找这个值,并返回一个指向该值的迭代器。

  2. 查找元素范围

    iterator find(const_iterator first, const_iterator last, const value_type& value);
    

    这个函数接受两个迭代器作为参数,表示搜索的范围,以及一个值作为参数,它会在指定范围内查找这个值,并返回一个指向该值的迭代器。

下面是一个使用 findstd::vector 中查找元素的例子:

#include <vector>
#include <iostream>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 查找元素4auto it = std::find(vec.begin(), vec.end(), 4);// 检查是否找到了元素if (it != vec.end()) {std::cout << "Element found: " << *it << std::endl;} else {std::cout << "Element not found." << std::endl;}return 0;
}

在这个例子中,我们使用 find 函数在 vec 中查找元素4。如果找到了,find 将返回一个指向元素4的迭代器;如果没有找到,它将返回一个指向 vec 末尾的迭代器。根据这个结果,我们打印出相应的消息。

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

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

相关文章

Induction or tail-recursion

选择排序 遍历整个待排序的数组&#xff0c;从第一个元素开始。在未排序的部分中&#xff0c;找到最小&#xff08;或最大&#xff09;的元素&#xff0c;并将其与第一个元素交换位置。接着从第二个元素开始&#xff0c;重复步骤2&#xff0c;直到所有元素都被排序 迭代版 递…

adb常用相关命令行

* 查看设备 adb devices ps这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 若有多台安卓设备&#xff0c;可以通过在adb后面加上 -s <设备id> 对指定设备进行装包、卸载等操作 *启动adb adb start-server *关闭adb adb kill-serve…

Qt实现简单的五子棋程序

Qt五子棋小程序 Qt五子棋演示及源码链接登陆界面单机模式联机模式联网模式参考 Qt五子棋 参考大佬中国象棋程序&#xff0c;使用Qt实现了一个简单的五子棋小程序&#xff0c;包含了单机、联机以及联网三种模式&#xff1b;单机模式下实现了简易的AI&#xff1b;联机模式为PtoP…

[数据集][目标检测]铁路工人工服安全帽检测数据集3065张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3065 标注数量(xml文件个数)&#xff1a;3065 标注数量(txt文件个数)&#xff1a;3065 标注…

算法D48 | 动态规划10 | 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

股票问题是一个动态规划的系列问题&#xff0c;今日安排的题目不多&#xff0c;大家可以慢慢消化。 121. 买卖股票的最佳时机 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Xe4y1u77q https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A…

OPTIONS请求(跨域预检查)

目录 一、什么是OPTIONS请求&#xff1f;二、简单请求、复杂请求三、特定的请求头、响应头 一、什么是OPTIONS请求&#xff1f; OPTIONS 请求方式是 HTTP 协议中的一种&#xff0c;主要用于 从响应头中获取服务器支持的HTTP请求方式。 OPTIONS 请求方式是 浏览级行为&#xf…

Redis命名设计

可读性和管理性 以项目名为前缀(防止key冲突)&#xff0c;用冒号分隔&#xff0c;比如项目名:表名:id zh(知乎):news_data(新闻数据):2(主键id) zh:news_data:2 精简性 key的命名&#xff0c;尽量精简&#xff0c;key的名字长度对内存的占用不可忽视&#xff0c;我们来实际…

网络编程--高并发服务器

这里写目录标题 引入场景 多进程并发服务器二级目录二级目录二级目录 多线程并发服务器二级目录二级目录二级目录 多路IO转接服务器设计思路对比引入 select函数简介参数介绍第一个参数第234参数返回值对于第234参数的应用对于最后一个参数总结 附加操作&#xff08;附加四个函…

【QCM4490】开机慢

项目场景: 开机第一阶段耗时40多秒, 行 23: 01-01 00:02:53.862 1000 1000 I boot_progress_start: 41123行 56: 01-01 00:02:55.404 1000 1000 I boot_progress_preload_start: 42664行 57: 01-01 00:02:56.687 1000 1000 I boot_progress_preload_end: 43947行 59: …

【SRE系列之docker容器】--dockerfile镜像优化

dockerfile镜像优化 1.1 镜像优化方法 系统镜像采用ubuntu或者alpine&#xff0c;会比centos少1G左右编写业务镜像时从官网拉取镜像&#xff0c;其余配置根据业务需求再配置编写dockerfile时把不用的安装包卸载或者删除尽量减少run命令的使用&#xff08;一个run命令&#xf…

代码随想录算法训练营第十三天|239. 滑动窗口最大值

239. 滑动窗口最大值 已解答 困难 相关标签 相关企业 提示 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1…

GetLastError()返回值及含义

https://www.cnblogs.com/ericsun/archive/2012/08/10/2631808.html 〖0〗-操作成功完成。 〖1〗-功能错误。 〖2〗-系统找不到指定的文件。 〖3〗-系统找不到指定的路径。 〖4〗-系统无法打开文件。 〖5〗-拒绝访问。 〖6〗-句柄无效。 〖7〗-存储控制块被损坏。 〖8〗-存储空…

牛客题霸-SQL入门篇(刷题记录二)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 以下内容是牛客题霸-SQL入门篇剩余的第 21-39 道题目的 SQL 代码答案。 由于涉及到的数据库表较多&#xff0c;因…

链路聚合实验(华为)

思科设备参考&#xff1a;链路聚合实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 网络设备的链路聚合技术&#xff08;Link Aggregation&#xff09;是一种将多个物理链路捆绑在一起&#xff0c;形成一个逻辑链路的技术。这样做可以增加带宽、提高可靠性和实现负…

(五)OpenOFDM解码

解码 现在我们已经校正了残余 CFO&#xff0c;也校正了通道增益&#xff0c;下一步是将 FFT 输出映射到实际数据位。这是对数据包进行编码的逆过程。 解调&#xff1a;复数到位解交织&#xff1a;对每个 OFDM 符号内的比特进行混洗卷积解码&#xff1a;去除冗余并纠正潜在的位…

C语言学习笔记day8

一维数组冒泡排序法 1. 作用 将乱序的一维数组按照从小到大的顺序排列 2. 原理示意图 3. 代码 #include <stdio.h> #include <stdlib.h> #include <time.h>int main(void) {int a[5] {0};int len sizeof(a) / sizeof(a[0]);int i 0;int j 0;int tmp …

CSS案例-3.背景练习

效果1 用背景加入图标 效果2 将图片设为页面背景,图片主体在中间 效果3 鼠标放到导航栏上会变颜色 知识点 CSS背景 属性 描述 取值 background 复合属性 看独立属性 background-color 背景颜色 <color> background-image 背景图像 none | url background-repeat 背景…

vulhub中GIT-SHELL 沙盒绕过漏洞复现(CVE-2017-8386)

GIT-SHELL 沙盒绕过&#xff08;CVE-2017-8386&#xff09;导致任意文件读取、可能的任意命令执行漏洞。 测试环境 为了不和docker母机的ssh端口冲突&#xff0c;将容器的ssh端口设置成3322。本目录下我生成了一个id_rsa&#xff0c;这是ssh的私钥&#xff0c;连接的时候请指…

算法练习:前缀和

目录 1. 一维前缀和2. 二维前缀和3. 寻找数组中心下标4. 除自身以外数组的乘积5. !和为k的子数字6. !和可被k整除的子数组7. !连续数组8. 矩阵区域和 1. 一维前缀和 题目信息&#xff1a; 题目链接&#xff1a; 一维前缀和思路&#xff1a;求前缀和数组&#xff0c;sum dp[r] …