深入理解C++中的Vector容器:用容器构建高效程序

文章目录

  • vector介绍
  • vector常用的成员函数
    • 有关vector定义的函数
    • vector的迭代器使用
    • vector关于空间操作的成员函数
    • vector的增删查改
  • 总结

在这里插入图片描述

vector介绍

在C++语言的库中包含有公共数据结构的实现,C++的这个部分内容就是众所周知的STL(标准模版库),vector就是标准模板库中的数据结构之一。

vector常用的成员函数

有关vector定义的函数

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

无参构造

void test_vector1()
{vector<int> v1();
}

构造n个val

void test_vector2()
{vector<int> v2(10, 1);
}

拷贝构造

void test_vector3()
{vector<int> v1{ 1,2,3,4 };vector<int> v2 = v1;for (int i = 0;i < v2.size();i++){cout << v2[i] << ' ';}
}

迭代器构造

void test_vector4()
{vector<int> v1{ 1,2,3,4 };vector<int> v2(v1.begin(), v1.end());for (int i = 0;i < v2.size();i++){cout << v2[i] << ' ';}
}

vector的迭代器使用

iterator的使用说明
begin+end返回指向容器的第一项的一个适当的迭代器和返回指向终止标志的一个迭代器
rbegin+rend和begin和end类似,但是需要用reverse_iterator获取其迭代器

begin+end
使用场景:遍历容器
第一种遍历方式

void test_vector5()
{vector<int> v1{ 1,2,3,4 };vector<int>::iterator it = v1.begin();while (it != v1.end()){cout << *it << ' ';it++;}
}

第二种遍历方式

void test_vector6()
{vector<int> v1{ 1,2,3,4 };for (vector<int>::iterator it = v1.begin();it != v1.end();it++){cout << *it << ' ';}
}

rbegin+rend

这里只展示一种遍历方式

void test_vector7()
{vector<int> v1{ 1,2,3,4 };vector<int>::reverse_iterator it = v1.rbegin();while (it != v1.rend()){cout << *it << ' ';it++;}
}

剩下的还有什么const_iterator等等下来大家可以自己试试

vector关于空间操作的成员函数

成员函数功能
size返回数据个数
capacity返回空间大小
empty判断容器是否为空
resize改变容器的size大小
reverse改变容器的capacity大小

前面三个相信大家都会用了,所以这里直接从resize开始讲起,如果不懂的可以去看我讲解的string那节。

resize

resize函数改变的是size的大小

void test_vector8()
{vector<int> v1{ 1,2,3,4 };cout << v1.size() << endl;v1.resize(10);cout << v1.size() << endl;
}

如果这里默认不给参数的话,就会直接默认分配空间,并且把新开辟的空间初始化为0

void test_vector8()
{vector<int> v1{ 1,2,3,4 };cout << v1.size() << endl;v1.resize(10, 3);cout << v1.size() << endl;for (int i = 0;i < v1.size();i++){cout << v1[i] << ' ';}
}

如果第二个给参数的话,剩下的空间就用第二个参数进行初始化

reverse函数

reverse和resize的用法相同。
但是需要注意的是:reverse的扩容的策略在每个平台下的每次的扩容量是不同的。
vs下capacity是按1.5倍增长的,g++是按2倍增长的。

vector的增删查改

push_back(尾插)

void test_vector9()
{vector<int> v1{ 1,2,3,4 };v1.push_back(1);
}

pop_back

void test_vector9()
{vector<int> v1{ 1,2,3,4 };v1.pop_back();
}

find(find函数并不是vector的成员函数,而是algorithm中的一个库函数)

void test_vector11()
{vector<int> v1{ 1,2,3,4 };vector<int>::iterator pos = find(v1.begin(), v1.end(), 1);cout << *pos << endl;
}

注意:find的返回值是迭代器,不是返回下标,而是返回对应的数的迭代器

Insert
Insert也是与迭代器相关的一个成员函数

void test_vector12()
{vector<int> v1{ 1,2,3,4 };v1.insert(v1.begin(), 1);
}

erase

void test_vector13()
{vector<int> v1{ 1,2,3,4 };v1.erase(v1.begin());
}

erase可以删除一个数据,也可以删除多个数据

void test_vector13()
{vector<int> v1{ 1,2,3,4 };v1.erase(v1.begin(), v1.end());
}

上面的代码是erase删除一段数据的场景

operator[]重载
vector支持[]访问,我们可以像数组一样进行访问比如:

int main()
{vector<int> v1{ 1,2,3,4,5,6,7,8,9 };for (int i = 0;i < v1.size();i++){cout << v1[i] << ' ';}return 0;
}

vector相较于数组的优势
在普通数组中不能进行复制操作,但是vector容器就支持复制操作,当我们需要复制一个容器的时候不需要用一个循环一个一个赋值,只需要用一个运算符重载=,就可以将容器中的值拷贝到另一个容器当中。

总结

在这篇关于“容器vector”的博客中,我们深入探讨了 C++ 中这个强大的数据结构。vector 提供了动态数组的功能,允许我们在运行时动态添加、删除元素,并且能够以常数时间复杂度访问元素,这使得它成为处理数据集合的理想选择。

我们了解了如何创建、初始化和操作 vector,以及如何使用其丰富的成员函数来满足各种需求。vector 的标准接口和异常安全性使得在处理数据时更加方便和安全。

通过学习本文,希望读者能够更加熟练地使用 vector,并且在实际项目中充分发挥它的优势。vector 不仅在算法和数据结构中有着广泛的应用,而且在各种类型的程序中都能发挥作用,从小型应用到大型系统都可以看到它的身影。

让我们继续深入学习和探索,掌握更多 C++ 中强大的工具和技术,不断提升自己的编程能力。感谢阅读!

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

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

相关文章

网络层(计算机网络谢希仁第八版)——学习笔记四

关于网络层的争论 争论的内容&#xff1a;网络层应该想运输层提供正阳的服务&#xff0c;是“面向连接的”还是“无连接”。 其实质就是&#xff1a;可靠交付应该交给谁负责&#xff1f;面向连接表示网络层负责可靠交付&#xff0c;无连接则是把这个任务交给运输层。 让网络层负…

C++笔记(STL标准库)

1.STL六大部件 容器 Containers分配器 Allocators&#xff1a;帮容器分配内存算法 Algorithms迭代器 Iterators&#xff1a;算法通过迭代器操作容器里的数据&#xff0c;是一种泛化的指针适配器 Adapters&#xff1a;修改或扩展已有类或函数的接口以满足特定的需求仿函数 Func…

Java13基础(StringBuilder和StringBuffer 包装类)

目录 一. StringBuilder和StringBuffer 扩容机制&#xff1a; 链式操作&#xff1a; 一些方法&#xff1a; 区别&#xff1a; 小结&#xff1a; 二. 包装类 创建对象&#xff1a; 自动装箱&#xff1a; 自动拆箱&#xff1a; 缓存池&#xff1a; 进制转换&#xff1…

亲测-wordpress文章实时同步发布修改删除多个站点的WP2WP插件

一款将wordpress文章同步到其他WordPress网站的插件&#xff0c;通过这款插件&#xff0c;可以保持不同博客之间文章发布、修改、删除的同步。 安装步骤&#xff1a; 主站和分站都要上传这个插件 1.把插件上传到wp-content\plugins解压出来wp2wp文件夹&#xff0c;然后启用插…

【数据结构】心里有 “B树“ 么?

序言 在学习数据库之前&#xff0c;博主觉得有必要学习B树系列&#xff0c;以便之后更好地了解其原理&#xff0c;既然说到这里了&#xff0c;那就再说几句&#xff0c;数据库是帮助我们管理存在硬件当中的数据&#xff0c;如果要从中读取数据&#xff0c;就要考虑到硬件的读取…

poll 机制

poll 机制 一、poll机制概述二、使用流程三、编程3.1 驱动编程3.1 应用编程 四、POLL 机制的内核代码详解五、编译后上机实验 poll 机制与休眠唤醒机制的区别&#xff1a; 休眠唤醒方式时&#xff0c;进程如果没有得到唤醒信号&#xff0c;需要一直休眠&#xff0c;进程就干不了…

企业数智化转型痛点

建设痛点 企业信息系统建设经历的三个阶段&#xff1a;信息化、网络化&#xff08;即我们常说的互联网&#xff09;、以及目前正在进行中的数智化。 企业数智化转型过程中&#xff0c;IT管理人员会面临以下问题困扰&#xff1a; 1&#xff0c;系统架构不规范 业务系统技术标准不…

React 中重新实现强制实施表单

就像设计人员一样&#xff0c;在添加逻辑之前&#xff0c;您需要为不同的状态“模拟”或创建“模拟”。例如&#xff0c;这里只是表单的视觉部分的模拟。这个模拟由一个 prop 控制&#xff0c;其默认值为 &#xff1a;statusempty 识别组件的不同视觉状态确定触发这些状态更改…

解决java.lang.IllegalArgumentException异常的正确方法

java.lang.IllegalArgumentException 是 Java 中的一个异常类&#xff0c;表示方法中传递的参数不合法。这个异常通常在方法被调用时抛出&#xff0c;表明方法的参数出现了问题。要正确解决这个异常&#xff0c;你可以按照以下步骤进行&#xff1a; 查看异常信息&#xff1a;首…

免费思维13招之七:空间型思维

免费思维13招之七:空间型思维 本篇给你带来的是空间型思维。 空间型思维,具体分为内部空间型思维和外部空间型思维。 什么叫内部空间型思维呢? 内部空间型就是充分利用现有空间或资源为社会提供免费服务,积累人气,增加流量,从而带动消费。 为什么你生意不好?为什么你…

iOS ------ MRC

一&#xff0c;MRC MRC&#xff1a;Manual reference Counting与ARC是两种不同的内存管理机制。ARC是自动引用计数&#xff0c;有编译器在编译时自动插入内存管理代码。而MRC是手动引用计数&#xff0c;开发者需要手动管理对象的引用计数。开发者需要手动调用retain&#xff0…

信息系统架构基本概念及发展_2.信息系统架构的定义

1.几种架构的定义 信息系统架构仍在不断发展中&#xff0c;还没有形成一个公认的定义&#xff0c;这里举出几个定义。 定义1&#xff1a;软件或计算机系统的信息系统架构是该系统的一个&#xff08;或多个&#xff09;结构&#xff0c;而结构由软件元素、元素的外部可见…

最全-全分辨率免ROOT免费脚本开发工具《懒人精灵》系统视频教程

---全分辨率免ROOT免费脚本开发工具《懒人精灵》--- 一、基础板块-视频教程 1.懒人精灵核心基础视频教程(一)&#xff1a;https://www.bilibili.com/video/BV1vr4y1P7hh/ 2.懒人精灵核心基础视频教程(二)&#xff1a;https://www.bilibili.com/video/BV1BB4y1X7rw/ 二、插件-…

ppt保存文件奇怪问题

我发现ppt中的形状保存成jpg,png和pdf时&#xff0c;格式不一样 比如 当右键单击时&#xff0c;然后选择另存为图片 png格式 jpg格式 pdf格式 感觉还是很奇怪&#xff0c;就pdf的格式比较靠谱一点

2024年建筑施工特种作业人员安全生产知识试题

100分题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 单选题&#xff08;1-10&#xff09; 1.因生产安全事故受损害的从业人员&#xff0c;除…

Busybox 在 Docker 中的部署和启动

可以使用 docker pull 指令下载 busybox:latest 镜像&#xff1a; PS C:\Users\yhu> docker pull busybox:latest latest: Pulling from library/busybox ec562eabd705: Pull complete Digest: sha256:5eef5ed34e1e1ff0a4ae850395cbf665c4de6b4b83a32a0bc7bcb998e24e7bbb St…

ElasticSearch集群环境

ElasticSearch集群环境 1、Linux单机 下载地址&#xff1a;LINUX X86_64 (elastic.co) 下载之后进行解压 tar -zxf elasticsearch-7.8.0-linux-x86_64.tar.gz 名字太长了改个名字改成es mv elasticsearch-7.8.0 es因为安全问题&#xff0c;Elasticsearch 不允许 root 用户…

性能优化 | el-table中内嵌大量el-input控件导致渲染卡顿的问题

场景 项目中有一个应用场景&#xff0c;用户需要在表单中大量使用选择框以及输入框填写数据&#xff08;每一行大概有三十几个输入框&#xff09;&#xff0c;当选择框与输入框达到一定数量的时候&#xff0c;页面会出现输入不连续、卡顿的现象&#xff0c;如下图&#xff1a;…

【信息系统项目管理师知识点速记】风险管理:规划风险管理

规划风险管理是确保项目风险得到有效管控的关键前期步骤,它为整个项目生命周期中识别、分析、应对和监控风险提供了蓝图。 核心目的 匹配度:确保风险管理策略与项目风险水平、组织及干系人重要性相匹配。适时调整:项目初期完成,但需在重大变动时重新评估和调整。输入要素 …

16.直方图均衡化

数字图像处理(17): 直方图均衡化处理 简介 直方图均衡化是一种简单有效的图像增强技术&#xff0c;通过改变图像的直方图来改变图像中各像素的灰度&#xff0c;主要用于增强动态范围偏小的图像的对比度。当原始图像的灰度分布较为集中的时候&#xff0c;可能造成图像不够清晰&…