STL容器之initializer_list与set

STL容器之initializer_list与set

  • initializer_list
    • 案例二(实现n个数的加法)
  • set
    • 单集合
      • 有序性
      • 唯一性
      • 删除元素
    • 多重集合
    • less与greater
    • 自定义类型

initializer_list

initializer_list创建的对象,初始值可以有很多个,像vector 一样
想多少个,就多少个。

include<iostream>
#include<initializer_list>

using namespace std;

int main()
{ 
	initializer_list<int> date = { 1, 2, 3, 9 }; //列表  想写多少就写多少
	
	system("pause");
	return 0;
}

## 案例一:vector动态数组的简单模拟

可以用作函数的参数(可以传一个,二个,想传多少个就多少个)
同时,注意,这里是常链表,用cons修饰
这里使用了委托构造

#include<iostream>
#include<initializer_list>

using namespace std;

template <class T>
class m_vector
{
public:
	m_vector(int cursize) : cursize(0)
	{
		men = new T[cursize];
	}

	m_vector( const initializer_list<T>& object): m_vector(object.size())//委托构造,初始化
	{
		for (auto& v : object)
		{
			men[cursize++] = v;
		}
	}

	void printDate()
	{
		for (int i = 0; i < cursize; i++)
		{
			cout << men[i];
		}
	}

private:
	T* men;
	int cursize;
};

int main()
{
	m_vector <int> mm = { 1, 6, 8 }; //常数列表用const修饰

	mm.printDate();

	system("pause");
	return 0;
}

案例二(实现n个数的加法)

#include<iostream>
#include<initializer_list>

using namespace std;

int add(initializer_list<int> date)
{
	int cout = 0;

	for (auto& v : date)
	{
		cout += v;
	}

	return cout;

}

int main()
{
	//利用initializer_list 可以求任意数之和
	cout << add({ 1, 3, 4 }) << endl;;

	cout << add({ 2, 4, 8, 9, 0, 9, 8, 6 });

	system("pause");
	return 0;
}

set

set也叫做集合的意思,有以下2个特性
1.有序性:默认的排序是从小到大进行排列
2.唯一性:相同值只保留一个、

单集合

有序性

#include<iostream>
#include<set>

using namespace std;

int main()
{
	set<int> date = { 1, 3, 0 ,8, 6, 4 };  //set容器自动排序 从小到大

	for (auto& v : date)
	{
		cout << v;
	}

	system("pasue");
	return 0;
}

在这里插入图片描述

唯一性

#include<iostream>
#include<set>

using namespace std;

int main()
{

	set<int> date = { 9, 9, 7, 8, 0, 6 };

	date.insert(2); //insert()插入函数,插入一个2;

	for (auto& v : date)
	{
		cout << v;
	}

	system("pause");
	return 0;
}

在这里插入图片描述

删除元素

#include<iostream>
#include<set>

using namespace std;

int main()
{
	set<int> date = { 1, 8, 9, 6 };

	cout << date.size() << endl;

	date.erase(find(date.begin(), date.end(), 9)); //删除元素,erase(),通常结合find算法加迭代器

	for (auto& v : date)
	{
		cout << v;
	}

	system("pause");
	return 0;

}

多重集合

多重集合,只具有排序功能,不具有去重功能

#include<iostream>
#include<set>

using namespace std;

int main()
{
	multiset<int> date = { 1, 3, 4, 5, 6,5 };

	for (auto& v : date)
	{
		cout << v;
	}
}

less与greater

#include
#include

using namespace std;

int main()
{
set<int,less> date = { 1, 2, 4, 3, 9, 5, 6, 6 }; //less从小到大排列

for (auto& v : date)
{
	cout << v;
}
cout << endl;
 
set<int, greater<int>> date1 = { 0, 3, 4, 1, 2, 2 , 3 ,4 ,1 }; //greater 从大到小排列

for (auto& v : date1)
{
	cout << v;
}

}

自定义类型

set处理自定义类型
比较的方法,不推荐使用重载,使用仿函数
同样后面打印的话,使用新式for循环加接口函数较为方便,使用函数重载的话,重载就较为复杂

#include<iostream>
#include<set>
#include<string>

using namespace std;

class MM
{
public:
	MM(int age,string name): age(age), name(name) {}

	int getAge() const { return age;}
	string getName() const { return name; }

private:
	int age;
	string name;
};

class compareName
{
public:
	bool operator ()(const MM& object1, const MM& object2) const
	{
		return object1.getName() < object2.getName();
	}
};

int main()
{
	set<MM, compareName> date;
	date.insert(MM(10, "张三"));
	date.insert(MM(13, "李"));
	date.insert(MM(89, "nininninin"));
	
	for (auto& v : date)
	{
		cout << v.getAge() << " " << v.getName() << endl;;  
	}
	//此处用函数重载,较为麻烦,可以使用接口函数进行访问;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第05章_排序与分页

第05章_排序与分页 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在…

SPI、I2C、CAN通信的简单介绍和笔记

标题中的三种通信方式&#xff08;协议&#xff09;是比较常见的一些通信协议&#xff0c;对于它们有一定的了解对于我们学习嵌入式单片机的学习有着非常重要的作用。于是我们对此有一些信息给到各位读者&#xff0c;这也是笔者自己巩固知识点的方式。如果觉得有帮到各位&#…

551、Elasticsearch详细入门教程系列 -【分布式全文搜索引擎 Elasticsearch(二)】 2023.04.04

目录一、Elasticsearch创建/查看/删除索引、创建/查看/修改/删除文档、映射关系1.1 Elasticsearch中的数据格式1.2 索引操作1.2.1 创建索引1.2.2 查看指定索引1.2.3 查看全部索引1.2.4 删除索引1.3 文档操作1.3.1 创建文档1.3.2 查看单个文档&#xff1a;主键查询1.3.3 查看所有…

不敲代码用ChatGPT开发一个App

先说下背景&#xff0c;有一天我在想 ChatGPT 对于成熟的开发者来说已经是一个非常靠谱的助手了&#xff0c;身边也确实有很多同事把它作为一个离不开的助理担当。 但是如果我只是略微懂一点前端知识的新人&#xff0c;了解 HTML、CSS、JS 相关的知识&#xff0c;想开发一个安…

什么是UEFI签名认证?UEFI签名有什么好处?

为了防御恶意软件攻击&#xff0c;目前市面上所有电脑设备启动时默认开启安全启动(Secure Boot)模式。安全启动(Secure Boot)是UEFI扩展协议定义的安全标准&#xff0c;可以确保设备只使用OEM厂商信任的软件启动。UEFI签名认证就是对运行在 UEFI 系统下的 efi 驱动和通过 UEFI …

第10章_创建和管理表

第10章_创建和管理表 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前…

OpenCloudOS 9.0发布,腾讯闯入底层基础软件“深水区”

3月22日&#xff0c;腾讯发布了2022第四季度及全年业绩&#xff0c;ToB业务成为腾讯的核心引擎。与此同时&#xff0c;ToB的腾讯在近年来持续加码自研投入&#xff0c;提升底层技术实力&#xff0c;2022年研发投入达到614亿元&#xff0c;2018年至今在研发上的投入已经超过2056…

Mockito单测之道

Mockito单测之道 去年写过一篇《TestNG单元测试实战》文章&#xff0c;严格来讲算集成测试。 没看的小伙伴可直接看本篇即可&#xff0c;本质是单元测试框架不同&#xff0c;写法不一样。 单测定义 单元测试定义&#xff1a; 对软件中最小可测单元进行验证&#xff0c;可理解…

【数据结构】链表练习题(2)

链表练习题1.相交链表(LeetCode160)2.环形链表(LeetCode141)3.环形链表Ⅱ(LeetCode142)1.相交链表(LeetCode160) 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。题目数据 保…

spring注解的使用

Spring的一个核心功能是IOC&#xff0c;就是将Bean初始化加载到容器中&#xff0c;Bean是如何加载到容器的&#xff0c;可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容&#xff0c;更加便于管理&#xff0c;并且使用注解可以大大提高了开发…

你看这个spring的aop它又大又宽

aop&#x1f693;AOP 分类AspectJ | 高级但是难用Spring AOP | 易用但仅支持方法aop 原理明月几时有&#xff0c;把酒问青天。——唐代李白《将进酒》 AOP 分类 在 Spring Boot 中&#xff0c;AOP 的实现主要有以下几种&#xff1a; 基于 AspectJ 的 AOP&#xff1a;这是一种基…

数据结构——红黑树

目录 概念 性质 结点的定义 插入 调整 当p是g的左孩子时 当p为g的右孩子时 插入完整代码 红黑树的检测 红黑树完整代码&#xff08;包括测试数据&#xff09; 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&…

如何有效备考PMP?

随着PMP证书含金量直线上升&#xff01;现在PMP证书就跟黄金一样&#xff0c;即保值又升值。 今天小编应势出一篇关于如何高效备考PMP的方法&#xff0c;在备考生快过来看看吧&#xff01; 1、准备好所需要的教材&#xff0c;视频&#xff0c;试题内容 备考备考&#xff0c;你…

蓝桥杯刷题冲刺 | 倒计时5天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.方格迷宫2.字符串删减1.方格迷宫 题目 链接&#xff1a; 4943. 方格迷宫 - AcWing题库 给定一…

Sam Altman专访:GPT-4没太让我惊讶,ChatGPT则让我喜出望外

导读ChatGPT、GPT-4 无疑是 2023 年年初人工智能界最大的「爆款」。3 月 26 日&#xff0c;OpenAI CEO、ChatGPT 之父 Sam Altman 接受了著名学者与科技播客、麻省理工大学研究员 Lex Fridman 的专访&#xff0c;Sam 分享了从OpenAI内部视角如何看待ChatGPT和GPT-4的里程碑式意…

分享:数据库存储与索引技术(三)LSM树实现案例

欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 本文来自OceanBase社区分享&#xff0c;仅限交流探讨。原作者马伟&#xff0c;长期从事互联网广告检索系统的研发&#xff0c;对数据库&#xff0c;编译器等领域也有浓厚兴趣。 文章目录1. MemTab…

2.2.2 第2遍:程序细节

这段话主要解释了C程序中#include指令和头文件的作用。头文件包含了编译器所需的信息&#xff0c;例如函数名、常量、以及如何使用它们等。在C程序中&#xff0c;头文件通常用于包含库函数&#xff0c;例如stdio.h文件中包含了输入和输出函数&#xff08;如printf()&#xff09…

LCHub:ChatGPT4和低代码来临,程序员面临下岗?

一个网友吐槽道: “ 建站出来了,你们说程序员会失业。 低代码出来了,你们说程序员会失业。 Copilot出来了,你们说程序员会失业。 Chatgpt出来了,你们说程序员会失业 虽然这只是网友的吐槽,但却引起了小编的好奇。为何程序员那么容易被新技术取代?今天小编打算跟大家…

Waline在Butterfly主题中的应用

LeanCloud 设置 (数据库) 国内版的LeanCloud需要绑定域名&#xff0c;所以我们直接选择国外版的LeanCloud 登陆注册 注册&#xff1a;点击这里进行跳转注册成功后进入控制台&#xff0c;选择 创建应用 。 创建完成后进入应用&#xff0c;下拉找到 设置 , 会有 AppID 、AppK…

ASO优化之应用商店关键词的实现

投放正确的合适的关键词&#xff0c;能够确保我们的应用获得更高的相关性和知名度。如果我们已经完成研究并想要竞争目标关键词&#xff0c;就需要在商品详情中去实施投放它们。 要在 Google Play Store 中投放——我们要打开 Google Play 控制台并点击“主要应用详情”选项卡…