C++之STL顺序容器

news2025/1/11 23:34:32

目录

一、STL容器简介

二、顺序容器


 

一、STL容器简介

STL容器是一个通用的数据结构,可以处理不同数据类型,包含基本的数据结构如链表、堆栈、队列等。可以分为顺序容器、关联容器、 容器适配器、特殊容器。本篇博客将简要介绍一下STL容器中的顺序容器。

二、顺序容器

2.1.特点:

• 元素的添加或插入位置与元素的值无关
• 无自动排序

 2.2分类:

1.向量(动态数组vector)

• 在内存中占有一块连续的空间(动态数组)
• 可自动扩充且提供越界检查
• 适合在向量末尾插入或删除数据
• 可用[]运算符直接存取数据

在定义成员时格式如下:

vector <数据类型> 名称

再利用各指令对创建出的动态数组进行修改。代码如下:

#include<iostream>
#include<vector>//需要引头文件<vector>
using namespace std;
int main() {
	vector<int> v;
    //vector<int> v(6, 1);//这里指数组中存放的是6个1
	for (int i = 0; i < 6; i++)
	{
		v.push_back(i);//尾插
	}
	for (int i = 0; i < (int)v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < 3; i++)
	{
		v.pop_back();//尾删
	}
	for (int i = 0; i < (int)v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	return 0;
}

 使用:• 头文件 <vector>
            • 适用于快速存取数据但非频繁插入删除场合

2.迭代器

定义:能对顺序容器或关联容器中的每个元素进行连续存取的对象(一个特殊的指针)。

用法:容器名<数据类型>::iterator 迭代器名;

如:vector <int>::iterator p;/ list <int>::iterator it;

使用:

标准迭代器的使用:

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v;
	for (int i = 0; i < 6; i++)
	{
		v.push_back(i);//尾插
	}
	//标准迭代器的使用
	vector<int>::iterator it;
	for (it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (int i = 0; i < 3; i++)
	{
		v.pop_back();//尾删
	}
	for (int i = 0; i < (int)v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	return 0;
}

非标准迭代器的使用:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector <int>v;
	vector <int>::reverse_iterator p;
	for (int i = 0; i < 10; i++)
		v.push_back(i);
	for (p = v.rbegin(); p != v.rend(); p++)
		cout << *p << " ";
	cout << endl;
}

3.列表容器(list)

定义:双向链表

• 前驱和后继
• 可在任意位置插入或删除数据
• 不能用[]运算符直接存取数据

使用:

• 头文件 #include <list>
• 适用于数据频繁插入删除的场合
• 适用于不在意查找速度的场合
• 排序sort()、合并merge()操作效率高

 

#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main() 
{
	list<double> first, second;
	first.push_back(3.1);//first数列尾插入三个数
	first.push_back(2.2);
	first.push_back(2.9);
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	second.push_back(3.7);//second数列尾插入三个数
	second.push_back(7.1);
	second.push_back(1.4);
	first.sort();//对first进行排序
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	second.sort();//对second进行排序
	first.merge(second);//合并两个数列
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	second.push_back(2.1);
	first.merge(second);
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	return 0;
}

 4.双端队列容器(deque)

特点:

• 以多内存块形式存储数据
• 可自动扩充且提供越界检查
• 适合在向量头尾插入或删除数据
• 可用[]运算符直接存取数据

使用:

• 头文件#include <deque>
• 适用于快速在队列头尾存取数据的场合
• 不适用于频繁插入删除的场合
• 若非头尾插入删除则效率低于list

#include <iostream>
#include <deque>
using namespace std;
int main()
{
    deque<double> d;
    deque<double>::iterator it;
    for (int i = 0; i < 5; i++)
    {
        d.push_back(i);
    }
    it = d.begin();
    it++;
    d.insert(it, 30);//在it前面插入30
    for (it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}

 

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

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

相关文章

Mysql 学习(八)单表查询方法 一

单表访问方法 前面几节我们了解 innodb 的底层数据结构的设计&#xff0c;究其本源我们其实是为了更好的理解如何查询&#xff0c;并且如何使得查询语句更加快速的问题&#xff0c;这节我们就来好好讲一讲首先我们先来创建一个表 CREATE TABLE index_value_table (id INT NOT…

Redis --- 哨兵、分片集群

一、Redis哨兵 Redis提供了哨兵&#xff08;Sentinel&#xff09;机制来实现主从集群的自动故障恢复。 1.1、哨兵原理 集群结构和作用 哨兵的结构如图&#xff1a; 哨兵的作用如下&#xff1a; 监控&#xff1a;Sentinel 会不断检查您的master和slave是否按预期工作 自动故障…

mysql 排名与排序

MySQL 8.0 版本新增 两个排名函数 分别是 ROW_NUMBER() 与 RANK() 用法 SELECT ROW_NUMBER() OVER(ORDER BY id) AS rowNo, name FROM users; SELECT RANK() OVER(ORDER BY score DESC) AS rankNo, name, score FROM students;后面跟 OVER&#xff08;&#xff09;括号里…

惠普星 TP01-055ccn电脑重装系统步骤

如果你的惠普星 TP01-055ccn电脑出现了系统问题&#xff0c;或者你想更换一个全新的微软操作系统&#xff0c;自己有不清楚相关的重装系统步骤怎么办&#xff1f;别担心&#xff0c;你可以参考以下的惠普星 TP01-055ccn电脑重装系统步骤来执行。 ​ 惠普星 TP01-055ccn电脑怎…

第1章 .Net7 Areas实现

1 集成路由匹配模式 var builder WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); var app builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { …

【LeetCode】376. 摆动序列

376. 摆动序列 思路 首先&#xff0c;我们可以将摆动序列分为两种&#xff1a; 「上升摆动序列」&#xff0c;当且仅当该序列是摆动序列&#xff0c;且最后一个元素呈上升趋势。如序列 [1,3,2,4] 即为「上升摆动序列」。 「下降摆动序列」&#xff0c;当且仅当该序列是摆动序…

深度解读:《数字孪生世界白皮书(2023)》全方位剖析

2023年初&#xff0c;中国信息通信研究院发布了《数字孪生城市产业图谱研究报告&#xff08;2022&#xff09;》&#xff0c;报告中提出我国数字孪生产业四阶段体系&#xff0c;2020年到2030年是我国数字孪生产业增长期&#xff0c;当前数字孪生市场需求和技术均处于高速发展阶…

腹部肿瘤内科专家朱利明:化疗也能“订制”,晚期结直肠癌不再“无药可救”

肠癌是发生在结肠和直肠的癌症&#xff0c;近二三十年来发病率快速上升。就在近期&#xff0c;“日本女大胃王菅原初代患肠癌病逝”的消息登上热搜&#xff0c;一时引发网友关注热议。 “人生有哲学三问&#xff1a;我是谁&#xff1f;我从哪里来&#xff1f;我到哪里去&#x…

window下sql-server备份后,拷贝到centos上

一.window下sql-server management 打开本地数据库&#xff0c;点备份 二.拷贝到centos下对应目录 mkdir -p /var/opt/mssql/backup 三.在 Linux 上还原数据库 下列步骤使用 sqlcmd 工具。 如果尚未安装 SQL Server 工具&#xff0c;请按照以下步骤安装&#xff1a; ●(1)用…

DJ5-3/4 中断处理程序和设备驱动程序

目录 5.3 中断机构和中断处理程序 5.3.1 中断简介 5.3.2 中断处理程序 5.4 设备驱动程序 5.4.1 设备驱动程序概述 5.4.2 设备驱动程序的处理过程 5.4.3 对 I/O 设备的控制方式 5.3 中断机构和中断处理程序 5.3.1 中断简介 1、中断和陷入 -- CPU 外部事件和内…

基于C++的通讯管理系统

1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C来实现-个通讯录管理系统 系统中需要实现的功能如下: ●添加联系人:向通讯录中添加新人&#xff0c;信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 ●显示联系人:显示通讯录中所有联系…

手把手教你搭建ROS阿克曼转向小车之(增量式PID代码实现)

在上一篇文章中我们已经成功的把编码器的反馈值给计算出来&#xff0c;这篇文章将会讲解怎么使用反馈回来的速度值进行PID计算&#xff0c;从而闭环控制电机的速度。 PID算法介绍 1.开环控制系统 开环控制系统(open-loop control system)是指被控对象的输出(被控制量)对控制器…

【软件开发】从单机到分布式

从单机到分布式 1.单台服务器应用 问题&#xff1a;由于流量越来越大出现服务器性能问题。 2.应用服务器和数据库服务器分离 对架构增加了一台服务器&#xff0c;应用和数据库分别部署到不同的服务器上&#xff0c;对于开发和测试没有任何影响&#xff0c;只需要应用服务器新…

画了个 MSP430F149的最小系统板 开源出来了

使用MSP430F149单片机设计的一个最小系统板&#xff0c;包含晶振电路、复位电路、CH340串口和BSL下载电路、按键和LED电路等&#xff0c;使用了Type-C接口作为供电和串口通信&#xff0c;另外引出了JTAG接口&#xff0c;所有IO口都引出了。 板载了3个按键和LED&#xff0c;可以…

项目范围说明书如何编写?

范围说明书是一份定义了项目范围的所有要素以及假设、项目要求和验收标准的文件。项目范围说明书将作为主要工具&#xff0c;供利益相关者和团队成员参考&#xff0c;并作为准确衡量项目成功的准则。 项目范围说明书是范围管理计划的一部分&#xff0c;包含了管理项目范围的所…

百度智能云联合发布《雄安新区2022年大数据研究报告》

近日&#xff0c;百度智能云、百度研究院商业智能实验室联合发布《未来之城 雄姿初显——雄安新区2022年大数据研究报告》&#xff08;以下简称《报告》&#xff09;&#xff0c;运用人工智能和大数据分析技术&#xff0c;全面呈现过去一年雄安新区在承接疏解、生态治理、城市建…

Golang当中的定时器

定时器 前言定时器的基本使用 前言 在平时写代码的时候&#xff0c;我们经常会遇到在将来某个时间点或者间隔一段时间重复执行函数。这个时候我们就可以考虑使用定时器。本片文章主要介绍一下golang当中的几个常用的定时器。time.Timer,time.Ticker,time.After以及time.AfterF…

文鼎创智能物联云原生容器化平台实践

作者&#xff1a;sekfung&#xff0c;深圳市文鼎创数据科技有限公司研发工程师&#xff0c;负责公司物联网终端平台的开发&#xff0c;稳定性建设&#xff0c;容器化上云工作&#xff0c;擅长使用 GO、Java 开发分布式系统&#xff0c;持续关注分布式&#xff0c;云原生等前沿技…

《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1Hh4y1H7dR 《安富莱嵌入式周报》第311期&#xff1a;300V可调…

【机器学习】决策树算法解读

【机器学习】决策树算法解读 文章目录 【机器学习】决策树算法解读1. 介绍1.1 优缺点1.2 结构1.3 学习过程1.4 决策树与条件概率分布 2. 决策树学习过程2.1 训练策略2.2 特征选择2.2.1 信息增益和条件熵 2.3 决策树的生成2.3.1 ID32.3.2 C4.52.3.3 CART2.3.4 小结 2.4 决策树的…