C++ 集合

2023-11-01

目录

1、Vector 容器

2、Stack 栈

3、Queue 队列

4、Map 关联容器

5、Set 关联容器


C++ 的集合,较为简单,但容易混淆,所以总结一下:

1、Vector 容器

  • Vector 是 C++ 的一种数据结构,确切的说是一个类
  • Vector 是 C++ 最常用的一个集合,相当于一个动态的数组 
  • Vector 是向量类型,可以容纳许多类型的数据,所以称其为容器
  • 当程序员无法知道需要的数组的大小时,Vector 可以达到最大节约空间的目的

头文件:

#include <vector> 

初始化:

vector<T> v1;             //默认初始化, 此时v1为空。
vector<T> v1(v2);         //执行的copy初始化,此时v1与v2的内容相同
vector<T> v1 = v2;       //与上面相同,都会执行copy构造函数
vector<T> v1(n);          //此时v1的size大小为n  (值是根据T的类型初始化的)
vector<T> v1(n, a);       //v1的初始化为n个值为a的元素
vector<T> v1{a, b, c};    //列表初始化,v1内现在的元素就是a,b,c。
vector<T> v1 = {a, b, c}; // 与上面相同

 属性操作:

v1.size();     //v1内已经存放的元素的数目个数
v1.capacity();   // v1现有的在存储容量(不再一次进行扩张内存空间的前提下)
v1.empty();     // 判断v1是否为空
v1.max_size();   // 返回vector可以存放的最大元素个数。

访问操作:

v1[n]    // 通过下标进行访问定义
v1.at(n)  // 与上面类似(若下标不存在,会抛出out_of_range的异常(较安全)
v1.front() // 返回vector中头部的元素的引用(使用时,一定要进行非空判断)
v1.back()  // 返回vector中尾部的元素 引用(使用时,一定要进行非空判断)

添加操作:

v1.push_back(a);       //在迭代器的尾部添加一个元素
v1.insert(iter,  a);    // 将元素a插入到迭代器指定的位置的前面 

删除操作:

v1.erase(iterator); // 删除迭代器指定的元素,返回被删除元素之后的元素的迭代器
v1.pop_back();    //删除尾部的元素,返回void类型断
v1.clear();     //清空所有元素

替换操作:

v1.swap(v2);   //交换v1与v2中的元素。

循环遍历:

//方法一:
for(vector<T>::iterator t=v1.begin();t!=v1.end();t++)
{
    cout<<*t<<' ';
}

//方法二:
for(int i = 0;i<v1.size();i++)
{
    cout<<a[i]<<' '; 
    //或者cout<<a.at()<<' ';
}

注意:下标只能用来获取已存在的元素。 


2、Stack 栈

栈(stack)是一个容器的改编

先进后出(FILO)

头文件:

#include <stack>

 声明:

stack<int> s;

操作:

s.empty();  //堆栈为空则返回真
s.pop();    //移除栈顶元素
s.push();   //在栈顶增加元素
s.size();   //返回栈中元素数目
s.top();    //返回栈顶元素
s.swap(s1);    // 交换两个栈中的内容

输出:

while(!s.empty())
{
    cout<<s.top();
    s.pop();
    if(!s.empty())
        cout<<' ';
}

3、Queue 队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。

头文件:

#include <queue>

 声明:

queue<int> q;

操作:

q.back();    //返回最后一个元素
q.empty();    //如果队列空则返回真
q.front();    //返回第一个元素
q.pop();    //删除第一个元素
q.push();    //在末尾加入一个元素
q.size();    //返回队列中元素的个数

循环遍历:

	for (int i = 1;i <= 10;i++) {
		q.push(i);
	}
	q.front();
	q.back();
	q.size();

	while (!q.empty()) {
	cout << q.front();
	q.pop();
}

4、Map 关联容器

map 是键值对形式,一个 key 对应一个 value 

头文件:

#include <map>

 初始化:

map<int, string> map1;

 操作:

 begin()         返回指向map头部的迭代器

 clear()        删除所有元素

 count()         返回指定元素出现的次数

 empty()         如果map为空则返回true

 end()           返回指向map末尾的迭代器

 equal_range()   返回特殊条目的迭代器对

 erase()         删除一个元素

 find()          查找一个元素

 get_allocator() 返回map的配置器

 insert()        插入元素

 key_comp()      返回比较元素key的函数

 lower_bound()   返回键值>=给定元素的第一个位置

 max_size()      返回可以容纳的最大元素个数

 rbegin()        返回一个指向map尾部的逆向迭代器

 rend()          返回一个指向map头部的逆向迭代器

 size()          返回map中元素的个数

 swap()           交换两个map

 upper_bound()    返回键值>给定元素的第一个位置

 value_comp()     返回比较元素value的函数

5、Set 关联容器

Set 中不允许有重复的值

头文件:

#include <set>

操作:

begin()    ,返回set容器的第一个元素

end()      ,返回set容器的最后一个元素

clear()    ,删除set容器中的所有的元素

empty()    ,判断set容器是否为空

max_size()   ,返回set容器可能包含的元素最大个数

size()      ,返回当前set容器中的元素个数

rbegin     ,返回的值和end()相同

rend()     ,返回的值和rbegin()相同

后续会持续更新。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 集合 的相关文章

随机推荐

  • Kibana介绍、安装和使用

    ELK中的K Kibana 下面就Kibana对ES的查询监控作介绍 就是常提到的大数据日志处理组件ELK里的K 什么是Kibana 现引用园友的一段对此的介绍 个人觉得比较全 Kibana是一个针对Elasticsearch的开源分析及可
  • Linux网络编程——TCP编程

    文章目录 前言 tcp编程相关函数 1 socket函数 2 bind函数 3 listen函数 4 accept函数 5 connect函数 6 send函数 7 recv函数 8 close函数 总结 前言 tcp编程的实现流程 tcp
  • IOException parsing XML document from class path resource [applicationContext.xml]

    今天在学习Spring框架时遇到了错误 经过报错分析发现是applicationContext xml文件位置放错了 在本地测试时 applicationContext xml文件应该放在src目录下 在服务端测试时放在WEB INF目录下
  • unity dll 位置

    在unityengine里面加 cs 然后在vs里面中看 C Program Files x86 Reference Assemblies Microsoft Framework NETFramework v3 5 Profile Unit
  • linux性能监控工具

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的
  • 虚拟机安装Kali Linux操作系统

    博主主站地址 微笑涛声 www cztcms cn Kali Linux是基于Debian的Linux发行版 设计用于数字取证操作系统 每一季度更新一次 由Offensive Security Ltd维护和资助 最先由Offensive S
  • 超详细!Win10(UEFI启动)安装Ubuntu18.04双系统

    UEFI模式 首先必须说明的是 有两种不同的启动模式 在安装双系统的时候的操作也不尽相同 本文是针对UEFI启动模式的安装双系统的成功案例 如果您的计算机的启动模式是Legacy 请参考其他文章 如何知道自己的电脑是哪种启动模式 找到 运行
  • VoiceChat使用心得:探索沟通的全新维度

    在数字时代 沟通方式的多样性为我们提供了更多选择 最近 我发现了一个令人兴奋的新工具 它让我重新审视了沟通的全新维度 VoiceChat 作为一个热衷于技术和交流的人 我迫不及待地想分享一下我的使用心得 VoiceChat是一种即时语音通话
  • c语言实现等价关系的判断以及等价类的输出

    原理 设X 1 2 3 n 关系R的关系矩阵是M mij 判断等价关系 1 R是自反的 lt gt m11 m22 mnn 1 2 R是对称的 lt gt lt gt mij mji 3 R是传递的 lt gt tr R R 求等价类 如果
  • C#语言参考

    C 语言参考 注意 本文并非最终文档 在最终的商业版本发布前 可能会有重大修改 而且 它属微软公司所有 它是根据接受者和微软公司间的非公开协议公布的 本文档只是为了报告的目的提供的 并且 在本文档中 微软公司并没有作任何明示或暗示的担保 对
  • Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution论文阅读笔记

    题目 Deep Laplacian Pyramid Networks for Fast and Accurate Super Resolution 中文 深度拉普拉斯金字塔网络 可实现快速 准确的超分辨率 参考 摘要 本文提出了拉普拉斯金字
  • virtual,override,new ,extern,abstract修饰符

    方法定义中可以使用的修饰符有 a new b public c protected d internal e private f static g virtual h override i extern j abstract 对于virtu
  • 常见混沌系统—Lorenz模型

    1963年 Lorenz发现了第一个混沌吸引子 Lorenz系统 从此揭开了混沌研究的序幕 概念 在数学中 一个动力系统被称为自治的 当且仅当这个系统由一组常微分方程组成 并且这些方程的表达式与动力系统的自变量无关 在有关物理的动力系统中
  • zip压缩,使用org.apache.tools.zip实现zip压缩和解压

    1 使用apache的ant解压 org apache tools zip 2 引入pom
  • echarts解决X轴溢出数据,echarts中的boundaryGap属性

    xAxis type category boundaryGap false true才是正常的 data Date 注意 把这个设置为true才是正常的 如果设置为false两端没有留白 就会导致数据溢出
  • 同个局域网内SSH远程Ubuntu系统

    荣誉认证 51CTO博客专家博主 TOP红人 明日之星 阿里云开发者社区专家博主 技术博主 星级博主 微信公众号 iOS开发上架 本文由iOS开发上架原创 文章目录 前言 在Ubuntu系统下如何实现不同系统间的SSH连接 同一局域网环境
  • C++ 内存分区模型

    本阶段注意针对C 面向对象编程计算左详细讲解 探讨C 中的核心和精髓 1 内存分区模型 C 程序在执行时 将内存大方向划分为4个区域 1 代码区 存放函数体的二进制代码 由操作系统进行管理的 2 全局区 存放全局变量和静态变量以及常量 3
  • 如何实现32.5万笔/秒的交易峰值?阿里交易系统TMF2.0技术揭秘

    阿里妹导读 基于TMF 2 0关键模型 阿里交易平台实现了业务定义可视 可管 可配 今天我们来一起了解交易平台遇到的挑战 TMF2 0解决的关键问题 以及TMF 2 0的关键模型 本文作者为毗卢 阿里巴巴资深技术专家 主导设计了TMF2 0
  • jsp页面,EL表达式失效

    检查pom文件引入的依赖
  • C++ 集合

    目录 1 Vector 容器 2 Stack 栈 3 Queue 队列 4 Map 关联容器 5 Set 关联容器 C 的集合 较为简单 但容易混淆 所以总结一下 1 Vector 容器 Vector 是 C 的一种数据结构 确切的说是一个