【C++ STL容器】:vector存放数据以及存放自定义的数据类型

news2025/1/17 18:02:18

前言

时不可以苟遇,道不可以虚行。


STL 中最常用的容器为:vector,暂且把它理解为我们之前学过的数组Array

一、创建一个vector容器(数组)

  • 添加头文件:#include <vector>
	vector<int> v;

二、向容器中插入数据

  • 利用内置函数:push_back()
 	v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);

三、通过迭代器访问容器中的数据

1、利用起始和结束两个迭代器

  • 先声明两个迭代器,一个指向容器中的第一元素一个指向容器中的最后一个元素的下一个位置
    在这里插入图片描述
  • 然后利用一层 while 循环,依次遍历容器中的元素。
	vector<int>::iterator itBegin = v.begin();   //起始迭代器,指向容器中第一个元素
    vector<int>::iterator itEnd = v.end();       //结束迭代器,指向容器中最后一个元素的下一个位置
	
	while (itBegin != itEnd) {
         cout << *itBegin << endl;
         itBegin++;
     }

2、直接使用 for 循环

  • 使用 for 循环,定义一个临时的起始迭代器指向容器 v 中第一个元素,当 该迭代器 指向位置到达容器 v 中的最后一个元素的下一个位置时,结束循环。
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << endl;
    }

3、利用 for_each 遍历算法

  • 需要添加头文件:#include <algorithm>,标准算法的头文件
  • 创建一个打印函数作为这个算法的第三个函数参数
	void myPrint(int val) {
	    cout << val << endl;
	}
	
	//最后一个参数为:传入函数名,回调作用
	for_each(v.begin(), v.end(), myPrint);
  • 跳转 for_each 函数的定义,其实现方法也是使用一层 for 循环。
    在这里插入图片描述
	for_each(_InputIterator __first, _InputIterator __last, _Function __f)
    {
	      // concept requirements
	      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
	      __glibcxx_requires_valid_range(__first, __last);
	      for (; __first != __last; ++__first)
		  		__f(*__first);
	      return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant.
    }

四、存储自定义数据类型

  • 定义一个 Person 类:
class Person {
public:
    Person(string name, int age) {
        this->m_Name = name;
        this->m_Age = age;
    }

    string m_Name;
    int m_Age;
};

  • 定义一个存储自定义数据类型的容器:
	vector<Person> v;

  • 定义 Person 类对象,作为存储数据:
	Person p1("a", 1);
    Person p2("b", 2);
    Person p3("n", 3);
    Person p4("m", 3);
    Person p5("u", 3);

  • 向容器中添加数据:
	v.push_back(p1);
    v.push_back(p2);
    v.push_back(p3);
    v.push_back(p4);
    v.push_back(p5);

  • 遍历容器中的数据:(提示: <> 中的数据类型是什么,(*it) 取出来的东西就是什么)
  • 例如这里:<> 中的是 Person,所以 (*it) 表示的是 Person 对象,it 表示的是 Person 对象的地址,也可以直接通过 it->m_Nameit->m_Age (地址指向)的方式,取出数据。
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;
	}
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		cout << "姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;
	}

五、存储自定义的指针数据类型

  • 定义一个 Person 类:
class Person {
public:
    Person(string name, int age) {
        this->m_Name = name;
        this->m_Age = age;
    }

    string m_Name;
    int m_Age;
};

  • 定义一个存储自定义数据类型的容器:
	vector<Person*> v;

  • 定义 Person 类对象,作为存储数据:
	Person p1("a", 1);
    Person p2("b", 2);
    Person p3("n", 3);
    Person p4("m", 3);
    Person p5("u", 3);

  • 向容器中添加数据,存放指针的话,需要在地址前面多加上一个取址符号(&
	v.push_back(&p1);
    v.push_back(&p2);
    v.push_back(&p3);
    v.push_back(&p4);
    v.push_back(&p5);

  • 遍历容器的数据:(提示: <> 中的数据类型是什么,(*it) 取出来的东西就是什么)
  • 此时 <> 的是 Person* ,所以 (*it) 表示的是 Person 对象的地址,可以通过 (*it)->m_Name(*it)->m_Age 的方式,取出数据。

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

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

相关文章

VauditDemo靶场代码审计

靶场搭建 将下载好的VAuditDemo_Debug目录复制到phpstudy的www目录下&#xff0c;然后将其文件名字修改成VAuditDemo&#xff0c;当然你也可以修改成其他的 运行phpstudy并且访问install目录下的install.php&#xff0c;这里我访问的是http://127.0.0.1/VAuditDemo/install/in…

Linux 性能分析工具- Atop安装和使用

Atop下载&#xff1a;Atoptool.nl 安装时&#xff0c;可能会出现报错&#xff1a;error: Failed dependencies 提示很需要安装python3&#xff0c;所以yum -y install python3&#xff0c;然后再装atop就没问题了。 atop 常用命令 您可在打开日志文件后&#xff0c;使用以下命…

R语言使用马尔可夫链对营销中的渠道归因建模

介绍 在这篇文章中&#xff0c;我们看看什么是渠道归因&#xff0c;以及它如何与马尔可夫链的概念联系起来。最近我们被客户要求撰写关于马尔可夫链的研究报告&#xff0c;包括一些图形和统计输出。我们还将通过一个电子商务公司的案例研究来理解这个概念如何在理论上和实践上…

QT开发教程:QScroller实现home界面滑动效果

在上章我们学习了QScroller实现home界面滑动效果,但是该界面是实现的上下滑动效果,如果想模拟手机home滑动界面,则需要实现左右滑动效果. 本章,则重写QStackedWidget类,来真正的模拟手机,来实现home界面左右滑动效果. 1.SmoothStackedWidget类实现 demo界面如下图所示(创建了…

[附源码]计算机毕业设计springboot第三方游戏零售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Discourse 在 2022-11 的最新版本中提供了新的边栏

官方有关这个边栏的说明和解释文章请参考链接&#xff1a; Try out the new sidebar and notification menus! - announcements - Discourse Meta 中的内容。 在这个新设计的边栏中包含了一些所有人都需要使用的快捷链接&#xff0c;同时还包括一些定义的快捷分类链接和 Tag 链…

haproxy keepalive实践

1 安装haproxy wget http://download.openpkg.org/components/cache/haproxy/haproxy-2.6.6.tar.gz tar -zxvf haproxy-2.6.6.tar.gz cd haproxy-2.6.6 mkdir -p /app/haproxy # 安装依赖,解决haproxy.c:80:31的问题 sudo yum -y install gcc openssl-devel pcre-devel system…

【Python】一、Python程序运行方式

文章目录实验目的一、熟悉Python的安装二、熟悉PyCharm安装三、启动IDLE&#xff0c;进入Python Shell&#xff0c;熟悉环境&#xff0c;运行教材案例&#xff1a;输出“hello world&#xff01;”四、打开“命令提示符”窗口&#xff0c;使用pip安装管理pygame、numpy等第三方…

算法训练Day30 回溯算法专题 | LeetCode332. 重新安排行程;51.N皇后(棋盘问题);37.解数独(二维的递归)

前言&#xff1a; 算法训练系列是做《代码随想录》一刷&#xff0c;个人的学习笔记和详细的解题思路&#xff0c;总共会有60篇博客来记录&#xff0c;计划用60天的时间刷完。 内容包括了面试常见的10类题目&#xff0c;分别是&#xff1a;数组&#xff0c;链表&#xff0c;哈…

android 自定义view: 跑马灯-光圈

本系列自定义View全部采用kt **系统: **mac android studio: 4.1.3 **kotlin version:**1.5.0 gradle: gradle-6.5-bin.zip 本篇效果: 前沿 最近在bilibili看到一个跑马灯光圈效果挺好, 参考着思路写了一下. bilibili地址,美中不足的是这是html代码 QaQ 实现思路 将效果…

Spark系列之Spark启动与基础使用

title: Spark系列 第三章 Spark启动与基础使用 3.1 Spark Shell 3.1.1 Spark Shell启动 安装目录的bin目录下面&#xff0c;启动命令&#xff1a; spark-shell$SPARK_HOME/bin/spark-shell \ --master spark://hadoop10:7077 \ --executor-memory 512M \ --total-executor-…

长短期记忆网络(LSTM)重点!(自己汇集了很多资料在这篇博客)

文章目录参考资料推荐基础知识评论区精髓代码实现底层实现简洁实现参考资料推荐 心心念念 学了这么久 &#xff0c;终于学到第57集了。 参考一篇掘金的图文LSTM 李宏毅老师的手撕视频配套课件 27:39 开始手撕 看完了李沐老师的LSTM又去找了李宏毅老师的课程然后发现又多了个导…

西门子机床联网

一、设备信息确认 1、确认型号 数控面板拍照确认&#xff1a; 此系统为&#xff1a;西门子828D 还有一种情况是面板无任何版本信息&#xff0c;这时就需要进入系统里面再确认。 2、确认通讯接口 1、数控面板的后面 X130为网络标号 2、其他位置 其他位置一般是前面位置用…

H3C mstp+vrrp实验 新华三杯拆解

H3C mstpvrrp实验一、实验拓扑二、实验要求局域网规划&#xff1a;可靠性&#xff1a;三、实验配置&#xff08;一&#xff09;链路聚合1.创建链路聚合组2.检查&#xff08;二&#xff09;VLAN1.创建vlan2.放行vlan3.检查&#xff08;三&#xff09;MSTP1.配置MSTP域2.配置主备…

通俗易懂的java设计模式(1)-单例模式

什么是单例模式&#xff1f; 单例模式是java中最简单的一种设计模式 需要注意的问题&#xff1a; 1.单例类有且只能有一个实例 2.单例类必须自己创建出这个实例&#xff0c;并提供给外界 那么如何自己创建实例而不让外界创建呢&#xff1f;很简单&#xff0c;我们将无参的构造函…

麦芽糖-刀豆球蛋白A,maltose-ConcanavalinA,刀豆球蛋白A-PEG-麦芽糖

麦芽糖-刀豆球蛋白A,maltose-ConcanavalinA,刀豆球蛋白A-PEG-麦芽糖 中文名称&#xff1a;麦芽糖-刀豆球蛋白A 英文名称&#xff1a;maltose-ConcanavalinA 别称&#xff1a;刀豆球蛋白A修饰麦芽糖&#xff0c;ConA-麦芽糖 还可以提供PEG接枝修饰麦芽糖&#xff0c;麦芽糖…

SpringCloud-alibaba-Nacos 从理论到落地使用

Nacos: Dynamic Naming and Configuration Service 就是&#xff1a; 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。、 下面是生态图&#xff1a; Nacos EurekaConfig Bus 即 Nacos就是注册中心 配置中心的组合 他能干什么呢&#xff1f; 1、替代Eu…

防火墙firewalld

RHEL7中有几种防火墙共存&#xff1a;firewalld、iptables、ebtables等。基于iptables的防火墙默认不启动&#xff0c;但仍然可以继续使用。RHEL7默认使用firewalld作为防火墙&#xff0c;管理工具是firewall-cmd。RHEL7的内核版本是3.10&#xff0c;在此版本的内核里防火墙的包…

论文阅读2 Learning Hierarchy-Aware Knowledge Graph Embeddings for Link Prediction

目录 问题 创新 1、Introduction 2、相关工作 3、HAKE模型 原文&#xff1a;[1911.09419] Learning Hierarchy-Aware Knowledge Graph Embeddings for Link Prediction (arxiv.org) 问题 现有的知识图嵌入模型主要关注对称/反对称、反转和复合symmetry/antisymmetry, i…

EquiVSet

又搬来一个于最优子集的神经集合函数学习方法 集合函数被广泛应用于各种场景之中&#xff0c;例如商品推荐、异常检测和分子筛选等。在这些场景中&#xff0c;集合函数可以被视为一个评分函数&#xff1a;其将一个集合作为输入并输出该集合的分数。我们希望从给定的集合中选取…