Lesson 06 vector类(上)

C++:渴望力量吗,少年?

文章目录

  • 一、vector是什么?
  • 二、vector的使用
    • 1. 构造函数
    • 2. vector iterator
    • 3. vector 空间增长问题
    • 4. vector增删查改
  • 三、vector实际使用


一、vector是什么?

  vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
注意:使用vector需要包含头文件 < vector >

二、vector的使用

1. 构造函数

函数名称功能说明
vector()(重点)无参构造
vector(size_type n, const value_type& val = value_type())构造并初始化n个val
vector (const vector& x); (重点)拷贝构造
vector (InputIterator first, InputIterator last);使用迭代器进行初始化构造

2. vector iterator

iterator的使用接口说明
begin + end(重点)获取第一个数据位置的iterator/const_iterator, 获取最后一个数据的下一个位置的iterator /const_iterator
rbegin + rend获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的reverse_iterator

在这里插入图片描述

3. vector 空间增长问题

容量空间接口说明
size获取数据个数
capacity获取容量大小
empty判断是否为空
resize(重点)改变vector的size
reserve (重点)改变vector的capacity

4. vector增删查改

函数名称功能说明
push_back(重点)尾插
pop_back (重点)尾删
find查找并返回位置
insert在position之前插入val
erase删除position位置的数据
swap交换两个vector的数据空间
operator[ ] (重点)可以像数组一样访问

三、vector实际使用

代码如下:

#include<iostream>
#include<vector>using namespace std;void test_vector1()
{cout << "我是 test_vector1()" << endl;vector<int> v1;vector<int> v2(10, 0);//内容是10个0vector<int> v3(v2.begin(), v2.end());//可以用迭代器初始化string str("hello world");vector<int> v4(str.begin(), str.end());//也可以用其他容器的迭代器初始化vector<int> v5(v4);//拷贝构造//遍历for (size_t i = 0; i < v3.size(); i++){cout << v3[i] << " ";//运算符重载}cout << endl;//vector<int>::iterator it = v4.begin();auto it = v4.begin();//迭代器遍历while (it != v4.end()){cout << *it << " ";++it;}cout << endl;for (auto e : v5)//范围for遍历(本质上还是迭代器){cout << e << " ";}cout << endl;cout << endl;
}void test_vector2()
{cout << "我是 test_vector2()" << endl;size_t sz;vector<int> v;//v.reserve(55);//1可以提前将空间设置足够,就可以避免边插入边扩容导致效率低下的问题了sz = v.capacity();cout << "making v grow:\n";for (int i = 0; i < 100; ++i)//查看扩容的具体数据{v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed: " << sz << '\n';}}//vs下使用的STL基本是按照1.5倍方式扩容cout << endl;
}void test_vector3()
{cout << "我是 test_vector3()" << endl;vector<int> v1;cout << v1.max_size() << endl;//没啥用vector<int> v;//v.reserve(100);  // size = 0    capacity 100v.resize(100);     // size = 100  capacity 100for (size_t i = 0; i < 100; i++){v[i] = i;//如果是注释上面的v.resize(100),取消对v.reserve(100)的注释仍会报错//虽然空间是开出来了,但是因为这个运算符重载包含对下标的断言,超过size就报错}for (auto e : v){cout << e << " ";}cout << endl;cout << endl;
}void test_vector4()
{cout << "我是 test_vector4()" << endl;vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);for (auto e : v){cout << e << " ";}cout << endl;v.insert(v.begin(), 0);//和string一样,效率不高,不建议经常使用for (auto e : v){cout << e << " ";}cout << endl;auto it = find(v.begin(), v.end(), 3);//在首尾之间找数字3并返回下标if (it != v.end()){v.insert(it, 30);//在3前面插入30}for (auto e : v){cout << e << " ";}cout << endl;it = find(v.begin(), v.end(), 3);if (it != v.end()){v.erase(it);//删除元素}for (auto e : v){cout << e << " ";}cout << endl;cout << "Before clear:" << endl;cout << v.size() << endl;cout << v.capacity() << endl;v.clear();//清除内容,容量还在cout << "After clear:" << endl;cout << v.size() << endl;cout << v.capacity() << endl;v.shrink_to_fit();//缩容至合适的容量,不怎么使用cout << "After shrink_to_fit:" << endl;cout << v.size() << endl;cout << v.capacity() << endl;cout << endl;
}int main()
{test_vector1();test_vector2();test_vector3();test_vector4();return 0;
}

vector的使用和string差不多,其余操作可以自行查阅或者参考之前的文章:
String类(上)
String类(中)


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

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

相关文章

使用Python实现简单的区块链

区块链技术作为一种分布式数据库技术,近年来备受关注。它的去中心化、安全性高的特点使得它在金融、物联网、供应链管理等领域有着广泛的应用前景。本文将介绍如何使用Python语言实现一个简单的区块链,包括创建区块、交易记录和工作量证明等功能。 区块链基本概念 区块链是由…

mysql视图(view)视图、创建、使用、查询、删除、视图的作用等操作

视图 1、视图的定义2、视图的创建3、视图的使用4、视图的查询5、查看视图的建立6、删除视图7、视图的作用 1、视图的定义 视图&#xff1a;视图是从一个或者多个基本表&#xff08;或视图&#xff09;导出的表。它与基本表不同&#xff0c;是一个虚表。视图有一个特性&#xf…

LVGL 在framebuffer设备上的移植

LVGL 在framebuffer设备上的移植 ItemDescDate2023-12-31Authorhongxi.zhuplatformNXP I.MX6ULLLCDSPI TFTLCD NV3030B 文章目录 LVGL 在framebuffer设备上的移植一、LVGL源码获取二、源码修改适配三、编译&运行补充 一、LVGL源码获取 新建lvgl_imx6ull文件夹&#xff0c…

低代码开发中业务蓝图的重要性:业务需求与系统实现的桥梁

在低代码应用开发领域&#xff0c;业务蓝图是一个至关重要的工具&#xff0c;它提供了组织业务流程需求的详细信息。它类似于一份指导开发人员进行应用开发的路线图&#xff0c;确保与业务的战略目标和需求保持一致。 低代码方法学&#xff0c;顾名思义&#xff0c;即减少了传…

水利工程制图解决方案的突破

小小的纪念下&#xff0c;终于实现CAD数字成图的实现&#xff0c;在高标准农田设计中软件成图比例占比60%以上。

Google机器人团队获ICRA 2023 机器人学习方向最佳论文奖:机器人实体控制的大语言模型程序

这篇论文主要讨论了大型语言模型&#xff08;LLM&#xff09;在机器人控制方面的应用。作者们指出&#xff0c;尽管LLM在理解和生成自然语言方面表现出色&#xff0c;但其在实际应用中&#xff0c;如机器人控制等领域的应用仍然有限。因此&#xff0c;他们提出了一种新的方法&a…

力扣labuladong一刷day49天迪杰斯特拉

力扣labuladong一刷day49天迪杰斯特拉 文章目录 力扣labuladong一刷day49天迪杰斯特拉一、743. 网络延迟时间二、1631. 最小体力消耗路径三、1514. 概率最大的路径 一、743. 网络延迟时间 题目链接&#xff1a;https://leetcode.cn/problems/network-delay-time/ 使用迪杰斯特…

登峰造极,师出造化,Pytorch人工智能AI图像增强框架ControlNet绘画实践,基于Python3.10

人工智能太疯狂&#xff0c;传统劳动力和内容创作平台被AI枪毙&#xff0c;弃尸尘埃。并非空穴来风&#xff0c;也不是危言耸听&#xff0c;人工智能AI图像增强框架ControlNet正在疯狂地改写绘画艺术的发展进程&#xff0c;你问我绘画行业未来的样子&#xff1f;我只好指着Cont…

每日一题——LeetCode976

方法一 个人方法 找规律&#xff1a; 要求要围成三角形且周长最大&#xff0c;那么三条边自然是越大且越接近越好。那么我们就从最大的三条边开始看能不能围成三角形。如果不能组成三角形&#xff0c;则丢弃最长的那条&#xff0c;再取剩余边里最长的那条再看能不能组成三角形…

第二百三十八回

文章目录 1. 概念介绍2. 原因与方法2.1 问题原因2.2 解决方法 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"修改页面导航中遇到的问题"沉浸式状态样相关的内容&#xff0c;本章回中将介绍如何修改Avatar的大小.闲话休提&#xff0c;让…

二叉树的中序遍历,力扣

目录 题目地址&#xff1a; 题目&#xff1a; 解题方法&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 注&#xff1a; 代码实现&#xff08;递归&#xff09;&#xff1a; 代码实现&#xff08;迭代&#xff09;&#xff1a; 题目地址&#xf…

数据库——建立ER模型及关系模型转换

​ 【实验内容及要求】 使用画图工具或MySQL Workbench等建模工具设计出相应的ER图&#xff0c;将局部ER图合并为一个整体ER模型&#xff0c;在ER模型中填加多样性约束&#xff0c;建立显示主键的ER模型&#xff0c;标识实体的属性&#xff0c;确认主键、外键。将上述ER图转化…

dubbo3 consumer消费端重启调用接口有30多秒等待问题

1、问题 Dubbo3 consumer消费端重启后&#xff0c;立即调用接口&#xff0c;需要等待有30多秒或者更久 之前没有加dubbo日志&#xff0c;所以 restful请求进去&#xff0c;直接卡住了&#xff0c;一直等待30多秒左右 加上dubbo日志后 2023-12-29 11:26:55.868 [main] INFO …

Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅

Nx市工业数据洞察&#xff1a;Flask、MySQL、Echarts的可视化之旅 背景数据集来源技术选型功能介绍创新点总结 背景 随着工业化的不断发展&#xff0c;Nx市工业数据的收集和分析变得愈发重要。本博客将介绍如何利用Flask、MySQL和Echarts等技术&#xff0c;从统计局获取的数据…

CentOS 7 lvm 裸盘的扩容和缩容减盘 —— 筑梦之路

背景介绍 之前写过比较多的关于lvm的文章&#xff1a; CentOS 7 lvm 更换坏盘操作步骤小记 —— 筑梦之路_centos更换硬盘操作-CSDN博客 xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路_ext4扩盘-CSDN博客 LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路_pve lvm数据恢复-CSDN博客…

各部门请注意,VELO维乐潮流骑士尼莫出街啦,快来加入吧!

VELO潮流骑士丨车界“小学生”尼莫&#xff0c;下面是来自她的自诉&#xff1a;      大家好&#xff01;我是尼莫&#xff0c;一枚骑车届的“小学生”&#xff0c;我爱上骑车已经有一年的时间啦&#xff01;在这一年的时间里&#xff0c;骑车改变了我很多&#xff1a;爱上…

单片机外设矩阵键盘之行列扫描识别原理与示例

单片机外设矩阵键盘之行列扫描识别原理与示例 1.概述 这篇文章介绍单片机通过行列扫描的方式识别矩阵键盘的按键&#xff0c;通过程序执行相应的操作。 2.行列扫描识别原理 2.1.独立按键识别原理 为什么需要矩阵按键 独立按键操作简单&#xff0c;当数量较多时候会占用单片机…

Qt线程封装FFmpeg播放器类

介绍 工作开发中需要处理的文件很多并无音频&#xff0c;针对这一场景&#xff0c;这里分享工作中自己封装使用的类库。精简的代码实现了播放、暂停、停止、快进、快退、进度更新跳转播放功能。直接放代码&#xff0c;方便后期复制使用。 代码 头文件 #ifndef VIDEOPLAYER_…

PAT 乙级 1033 旧键盘打字

旧键盘上坏了几个键&#xff0c;于是在敲一段文字的时候&#xff0c;对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键&#xff0c;打出的结果文字会是怎样&#xff1f; 输入格式&#xff1a; 输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其…

机器视觉实战应用:手势、人脸、动作以及手势鼠标构建(一)

CV实战应用手势、人脸、动作以及手势鼠标构建&#xff08;一&#xff09;总起 核心思想 手势识别是一种常见的计算机视觉应用&#xff0c;它可以通过摄像头或者预先录制的视频图像来追踪和识别人类手势。手势识别的应用非常广泛&#xff0c;例如在游戏、虚拟现实、人机交互等…