STL——array和vector容器

news2024/12/27 11:09:38

在这里插入图片描述

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的
📖作者主页:热爱编程的小K
📖专栏链接:c++

🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾

在这里插入图片描述

目录文章

        • 一、array
          • 1、array概念
          • 2、操作基本数据类型
          • 3、操作自定义类型
          • 4、函数介绍
        • 二、vector
          • 1、Vector概念
          • 2、操作基本类型
          • 3、操作自定义类型
        • 三、vector和array的嵌套
          • 1、array嵌套
          • 2、vector嵌套

一、array

1、array概念

array是一个容器,封装了固定大小的数组。

该容器是聚合类型,其语义与C风格数组的结构相同, T [ N ]作为其唯一的非静态数据成员。与c风格数组不同的是,它不会自动衰减为T*。(数组名不会自动转为数组首地址)

该容器将C风格数组的性能可访问性与标准容器的优点相结合,比如知道自己的大小、支持赋值、随机访问迭代器等。

2、操作基本数据类型

初始化不赋初值,里面的值不会自动初始化,因为rray没有构造函数,也没有私有或保护成员,所以不初始化读出来的是野值

void testOne()
{
    array<int, 5> pos;
    for (int i = 0; i < pos.size(); i++)
    {
        cin >> pos[i];
    }
    for (int i = 0; i < pos.size(); i++)
    {
        /* code */
        cout << pos[i] << " ";
    }
    cout << endl;
    array<double, 3> nums = { 1.11,2.22,3.33 };
    //迭代器方式访问
    for (array<double, 3>::iterator iter = nums.begin(); iter != nums.end(); iter++)
    {
        cout << *iter << " ";
    }
    cout << endl;
    //新版for循环方式访问
    for (auto v : nums)
    {
        cout << v << " ";
    }
    cout << endl;
}
3、操作自定义类型

操作自定义类型时要记得重载运算符

class MM
{
public:
    MM(int age = 0, string name = "") :age(age), name(name) {}
    friend ostream& operator<<(ostream& out, const MM& object)
    {
        out << object.name << " " << object.age << endl;
        return out;
    }
    string getName() const { return name; }
    int getAge() const { return age; }
protected:
    int age;
    string name;
};
bool seacherName(const MM& object) {
    return object.getName() == "貂蝉";
}
void testtwo() {
    array<MM, 3> info;
    info[0] = { 18,"貂蝉" };
    info[1] = { 19,"杨玉环" };
    info[2] = { 16,"坤坤" };
    for (auto v : info)
    {
        cout << v << endl;
    }
    array<MM, 3>::iterator iter = find_if(info.begin(), info.end(), seacherName);
    if (iter != info.end()) 
    {
        cout << (*iter).getName() << " " << iter->getAge() << endl;
    }
}
4、函数介绍
函数名作用
size()读取数组大小
empty()判断数组是否为空
front()读取数组首元素
back()读取数组末尾元素
fill()用某元素填充数组
void test3() {
    array<int, 5> king = { 1,2,3,4,5 };
    cout << "size:" << king.size() << endl;
    cout << "empty:" << king.empty() << endl;
    cout << "front" << king.front() << endl;
    cout << "back:" << king.back() << endl;
    cout << "填充:";
    king.fill(5);
    for (int i = 0; i < 5; i++)
        cout << king[i] << " ";
}

二、vector

1、Vector概念

vector 容器是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。

vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时

2、操作基本类型

注意:成员函数push_back()是在容器的最后面插入,如图,原先建立的时候是3个空间,用成员函数插入一个,空间变成4个,以及最后又在后面插入了一个999

在这里插入图片描述

//操作基本数据类型
bool cmpData(int data) { return data == 888; }
void testOne() 
{
	//不带长度的构建方式,不能采用下标法插入,只能采用成员函数插入
	vector<int> king;
	//king[0] = 1;
	king.push_back(1);
	king.push_back(2);
	king.push_back(3);
	for (int i = 0; i < king.size(); i++)
	{
		cout << king[i] << " ";
	}
	cout << endl;
	for (auto v : king) {
		cout << v << " ";
	}
	cout << endl;
	for (vector<int>::iterator iter = king.begin(); iter != king.end(); iter++) {
		cout << *iter << " ";
	}
	cout << endl;

	vector<int> info(3);
	info.push_back(888);
	for (int i = 0; i < info.size()-1; i++)
	{
		cin >> info[i];
	}
	info.push_back(999);
	for(auto v:info)
	{
		cout << v << " ";
	}
	cout << endl;
	vector<int>::iterator iter = find_if(info.begin(), info.end(), cmpData);
	if (iter != info.end()) cout << *iter << endl;
}
3、操作自定义类型

在这里插入图片描述

这里用迭代器进行删除的时候,成员函数erase()会把删除的下一个位置返回回来

//操作自定义数据类型
class MM
{
public:
	MM(int age=0,string name=" "):age(age),name(name){}
	friend ostream& operator<<(ostream& out, const MM& object) {
		out << object.name << " " << object.age << endl; \
			return out;
	}
	string getName() { return name; }
	int getAge() { return age; }
protected:
	int age;
	string name;
};
void testTwo() {
	vector<MM> info;
	info.push_back(MM(19, "西施"));
	info.push_back(MM(18, "貂蝉"));
	info.push_back(MM(20, "妲己"));
	for (auto v : info) {
		cout << v;
	}
	cout << endl;
	for (vector<MM>::iterator iter = info.begin(); iter != info.end();) {
		if (iter->getName() == "妲己") {
			iter = info.erase(iter);
		}
		else
		{
			iter++;
		}
	}
	for (auto v : info) {
		cout << v;
	}
}

三、vector和array的嵌套

1、array嵌套

在这里插入图片描述

void testOne() 
{
	//nums[4][3]
	array<array<int, 4>, 3> nums;
	for (int i = 0; i < nums.size(); i++)
	{
		for (int j = 0; j < nums[i].size(); j++) {
			nums[i][j] = i * nums.size() + j;
		}
	}
	for (auto v:nums )
	{
		for (auto m : v) {
			cout << m << " ";
		}
		cout << endl;
	}
}
2、vector嵌套

在这里插入图片描述

void testTwo() {
	vector<vector<int>> info;
	for (int i = 0; i <=3; i++)
	{
		vector<int> temp;
		for (int j = 0; j <= i; j++) 
		{
			temp.push_back(j);
		}
		info.push_back(temp);
	}
	for (auto v : info) {
		for (auto m : v) {
			cout << m << " ";
		}
		cout << endl;
	}
}

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

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

相关文章

解密HTTP协议:探索其组成部分与工作原理

前言 欢迎来到今天的每日一题&#xff0c;每日一提。昨天有聊到&#xff0c;HTTP 和 HTTPS 之间有什么区别&#xff1f;面试官基本秉承着刨根问题的原则&#xff0c;肯定是不会轻易放过我们的&#xff0c;那么自然是要继续拷问了。所以我们今天就聊聊什么是 HTTP&#xff0c;它…

微服务分布式搜索引擎 Elastic Search RestClient 操作文档

文章目录⛄引言一、初始化 Java RestClient二、RestClient 对文档的CRUD操作⛅新增文档⏰查询文档⚡修改文档⌚删除文档三、RestClient 批量文档导入⛵小结⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能…

SpringBoot整合XXL-JOB

XXL-JOB&#xff1a; 官网文档地址&#xff1a;分布式任务调度平台XXL-JOB GitHub地址&#xff1a;https://github.com/xuxueli/xxl-job Gitee地址&#xff1a;https://gitee.com/xuxueli0323/xxl-job 拉取代码&#xff0c;首先执行一下doc/db下的sql文件 tables_xxl_job.sq…

JAVA识别电子发票问题汇总

之前写的java解析电子发票&#xff0c;上线后出现了一下线上的问题&#xff0c;无法解析发票&#xff0c;对问题做个规整&#xff0c;仅供参考&#xff01; 1. Pdfbox介绍 pdfbox是一款Apache的开源工具&#xff0c;可以进行对pdf进行操作&#xff0c;如题&#xff0c;转图片…

UE4C++学习篇(十九)-- 动画蒙太奇初级使用

用一个第三人称的射击案例来简单介绍一下动画蒙太奇的使用&#xff0c;动画蒙太奇的具体介绍这里就不多说了&#xff0c;不知道的小伙伴可以去搜一下了解。 这里介绍角色射击&#xff0c;射击的时候播放一个射击动画。 选中需要创建出动画蒙太奇的动画&#xff0c;点击创建&am…

物理服务器通过U盘安装CentOS 7操作系统

一、制作U盘启动盘 1、使用UltraISO工具打开需要安装的操作系统iso镜像文件&#xff08;我安装的是CentOS-7-x86_64-Minimal-2009.iso&#xff09;&#xff0c;如下图所示 镜像下载地址&#xff1a;centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2、将该系统镜像…

nginx--官方模块

目录 1.概述 2.Nginx的客户端状态 1.使用 2.目录中选择一个随机主页 3.http内容替换 ​编辑 4.nginx请求限制 5.nginx访问控制 1.基于Ip的访问控制 1.1使用 1.2access_mod.conf 1.3只允许自己ip访问 1.4http_x_forwarded_for 1.5http_access_module局限性 2.基于…

【用python将文件夹下面的文件夹里面的文件全部提取出来,并且放到一个新的文件夹】

文件里面有多个文件&#xff0c;每个文件下面有很多jpg格式的照片&#xff0c;把所有照片提取出来并且放在一个新的文件夹下面。 可以使用Python的os和shutil库来完成这个任务。 比如说&#xff1a;我的faces95文件夹下面有95个文件&#xff0c;每个文件下面有十七到十八个照片…

深拷贝和浅拷贝

目录 一.Java的Cloneable和clone()方法 1.Object类中的clone() 2.实现Cloneable接口的类 3.通过clone()生成对象的特点 二.深拷贝和浅拷贝 1.浅拷贝 2.深拷贝 3.实现深拷贝的两种方法 1.一种是递归的进行拷贝 2.Json字符串的方式进行深拷贝 一.Java的Cloneable和clone…

No.037<软考>《(高项)备考大全》【第21章】项目组合管理

【第21章】项目组合管理1 考试相关2 项目组合管理2.1 项目组合管理、项目集管理、项目管理异同2.2 项目组合管理过程组3 练习题参考答案1 考试相关 选择1分必考 案例概率低&#xff0c;知识点看一遍即可 2 项目组合管理 1、项目组合是将项目、项目集&#xff0c;以及其他方面…

2023年MathorCup数学建模赛题浅析

MathorCup俗称妈杯&#xff0c;是除了美赛国赛外参赛人数首屈一指的比赛&#xff0c;而我们的妈杯今天也如期开赛。今年的妈杯难度&#xff0c;至少在我看来应该是2023年截至目前来讲最难的一场比赛。问题的设置、背景的选取等各个方面都吐露着我要难死你们的想法。难度是恒定的…

Servlet、SpringMVC、SpringBoot整合Thymeleaf汇总

介绍 模板引擎&#xff0c;与JSP、JSTL类似。 好处是&#xff1a;直接写在HTML文件中&#xff0c;服务器可以解析&#xff0c;浏览器也可以解析&#xff0c;实现了动静分离&#xff0c;并未破坏html结构&#xff0c;即使无网络、不通过后端渲染也能在浏览器成功打开&#xff…

kettle——数据清洗(数据表-->文本文件)

实验步骤&#xff1a; 1.数据表&#xff08;图片加分析&#xff0c;创建表的过程和对应的字段及记录&#xff09; ①选择数据库 ②创建表结构 ③插入数据 2.kettle连接模块&#xff08;图片加分析,每个模块实现的功能&#xff09; ①新建“转换”文件,”文件”——>“新建…

JAVA开发运维(Jenkins中踩的坑)

最近尝试通过Jenkins来自动化部署项目&#xff0c;没想到还踩了很多坑。Jenkins部署的基本原理&#xff1a; 通过Jenkins服务器拉取gitlab上的代码进行打包&#xff0c;推送到目标服务器上&#xff0c;并运行启动脚本。 那么Jenkins就要解决三个问题。 1.连接上目标服务器 …

电子行业应如何实施数字工厂管理系统

随着信息技术的快速发展&#xff0c;电子制造企业也正在逐步做好数字化转型&#xff0c;而数字工厂管理系统便是数字化管理中的一个重要系统。数字工厂系统可以帮助电子企业实现生产过程的自动化、智能化和可视化&#xff0c;提高生产效率&#xff0c;降低生产成本&#xff0c;…

2023香港国际创科展开幕,欧科云链受邀参展

4月12日&#xff0c;由香港特区政府、香港贸易发展局主办的首届香港国际创科展&#xff08;InnoEX&#xff09;在香港会展中心开幕&#xff0c;欧科云链&#xff08;01499.HK)作为全球领先的Web3科技企业受邀参展。香港国际创科展现场图 此次创科展上&#xff0c;欧科云链向公众…

【RocketMQ】负载均衡源码分析

RocketMQ在集群模式下&#xff0c;同一个消费组内&#xff0c;一个消息队列同一时间只能分配给组内的某一个消费者&#xff0c;也就是一条消息只能被组内的一个消费者进行消费&#xff0c;为了合理的对消息队列进行分配&#xff0c;于是就有了负载均衡。 接下来以集群模式下的消…

智优ERP的升级版智优E3_ERP,可以自定义列,和自定义打印公司logo

新版的智优E3_ERP系统&#xff0c;新增了许多供自定义的列。 系统能够解决的企业管理问题&#xff1a; 一、日常的出入库管理、收付款管理、往来对账、移动加权平均成本核算、以及相关数据的查询分析&#xff1b; 二、订单的跟单管理&#xff08;包括销售跟单、采购跟单、生产…

ElasticSearch常用查询操作

ES查询 一般我们使用ES最多的就是查询&#xff0c;今天就讲一下ES的查询。这里我是建了一个person的索引。 "person" : {"aliases" : { },"mappings" : {"properties" : {"address" : {"type" : "text"…

[LeetCode周赛复盘] 第 102 场双周赛20230415

[LeetCode周赛复盘] 第 102 场双周赛20230415 一、本周周赛总结二、 6333. 查询网格图中每一列的宽度1. 题目描述2. 思路分析3. 代码实现三、6334. 一个数组所有前缀的分数1. 题目描述2. 思路分析3. 代码实现四、6335. 二叉树的堂兄弟节点 II1. 题目描述2. 思路分析3. 代码实现…