C++(13) STL 库初识

文章目录

      • STL 库初识
        • 1. STL 库
          • 1.1 STL 库的案例
          • 1.2 C++ 标准模板库的三个组件
          • 1.3 案例展示
        • 2. 迭代器
          • 1.1 概述和分类
          • 2.2 代码案例

STL 库初识

1. STL 库
1.1 STL 库的案例

类似学习了模板的概念。C++STL (标准模板库) 是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如:向量、链表、队列、栈。

1.2 C++ 标准模板库的三个组件

C++ 标准模板库的核心包括以下三个组件:

组件描述
容器 (Containers)容器是用来管理某一类对象的集合。C++提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法 (Algorithms)算法用于容器。它们提供了执行各种操作的方式,包括对容器执行初始化、排序、搜索和转换等操作。
迭代器 (itreators)迭代器用于遍历对象集合的元素。这些元素可能是容器,也可能是容器的子集。
1.3 案例展示

代码案例

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char const *argv[])
{
    /*
    得到了一个要求存储类型为 int 类型的 vector 容量
    底层实现方式为数组形式,可以从数组角度分析,完成增删改查操作
    */
    vector<int> v1 = vector<int>();

    cout << "size : " << v1.size() << endl; // 0
    cout << "capacity : " << v1.capacity() << endl; // 0

    /*
    vector 容器提供的插入数据的方法
    */
    v1.push_back(1);
    cout << "size : " << v1.size() << endl; // 1
    cout << "capacity : " << v1.capacity() << endl; // 1

    v1.push_back(2);
    cout << "size : " << v1.size() << endl; // 2 
    cout << "capacity : " << v1.capacity() << endl; // 2

    v1.push_back(3);
    cout << "size : " << v1.size() << endl; // 3
    cout << "capacity : " << v1.capacity() << endl; // 4

    v1.push_back(4);
    cout << "size : " << v1.size() << endl; // 4
    cout << "capacity : " << v1.capacity() << endl; // 4

    v1.push_back(5);
    cout << "size : " << v1.size() << endl; // 5
    cout << "capacity : " << v1.capacity() << endl; // 8
    cout << "\n";

    // 1 2 3 4 5
    cout << "v1[2] : " << v1[2] << endl; // 3

    /*
    at(int idx); 
    返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range 异常
    */
    cout << "v1.at(2) : " << v1.at(2) << endl; // 3

    /*
    front();
    返回容器中第一个数据元素
    */
    cout << "v1.front() : " << v1.front() << endl; // 1

    /*
    back();
    返回容器中最后一个数据元素
    */
    cout << "v1.back() : " << v1.back() << endl; // 5

    /*
    删除最后一个元素
    */
    v1.pop_back();

    cout << "v1.back() : " << v1.back() << endl; // 4

    return 0;
}
2. 迭代器
1.1 概述和分类

在这里插入图片描述

C++ STL 库中的迭代器和其分类:

迭代器类型描述
输入迭代器 (Input Iterator)用于读取数据序列的元素,只能使用前向迭代操作
输出迭代器 (Output Iterator)用于向数据序列写入元素,只能使用前向迭代操作
前向迭代器 (Forward Iterator)用于读写数据序列的元素,支持前向迭代操作
双向迭代器 (Bidirectional Iterator)用于读写数据序列的元素,支持前向和后向迭代操作
随机访问迭代器 (Random Access Iterator)用于读写数据序列的元素,支持随机访问操作和常数时间复杂度的元素访问
连续内存迭代器 (Contiguous Iterator)特殊形式的随机访问迭代器,用于在连续内存中移动
反向迭代器 (Reverse Iterator)反向封装其他迭代器,实现反向遍历操作
2.2 代码案例

利用 STL 库中使用频率较高的 vector 来演示迭代器

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char const *argv[])
{
    // 得到一个要求存储类型为 int 类型的 vector 容量
    vector<int> v1;

    // 将数据放入 v1 里
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    v1.push_back(5);

    vector<int>::iterator it = v1.begin();

    /*
    iterator 是一个针对于当前 vector 容器的迭代器
    是访问数据内容的一个【指针】,如果想要提取 vector 中
    存储的数据内容,需要通过 *it 获取
    */
    cout << "*it : " << *it << endl; // 1
    it++;
    cout << "*it : " << *it << endl; // 2

    cout << "--------------------------" << endl;

    // 利用 for 循环展示整个数据情况
    for (vector<int>::iterator it2 = v1.begin();
            it2 != v1.end();
            it2++)
    {
        cout << "*it2 : " << *it2 << endl;
    }

    return 0;
}

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

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

相关文章

【Linux详解】——进程信号

&#x1f4d6; 前言&#xff1a;本期介绍进程信号。 目录 &#x1f552; 1. 生活角度的信号&#x1f552; 2. 技术角度的信号&#x1f558; 2.1 Linux中的信号&#x1f558; 2.2 进程对信号的处理 &#x1f552; 3. 信号的产生方式&#x1f558; 3.1 键盘产生&#x1f558; 3.2…

svn如何合并代码以及解决合并冲突的问题(把分支代码合并到主版本)

1.选择主版本的文件夹。 ​​​​​​​ 2.选择合并一个不同的分支 3.选择主分支的路径和要合并的代码范围 4.点解next 选择这两个选项 5.然后点击Test merge&#xff0c;查看能否和并成功 有红色的提示&#xff0c;说明是有冲突的&#xff0c; 都是黑色说明能够合并成功 …

【无标题】如何使用 MuLogin 设置代理

如何使用 MuLogin 设置代理 使用 MuLogin 浏览器设置我们的代理&#xff0c;轻松管理多个社交媒体或电子商务帐户。 什么是MuLogin&#xff1f; MuLogin 是一款虚拟反检测浏览器&#xff0c;使用户能够管理多个电子商务、社交媒体和广告帐户&#xff0c;而无需验证码或 IP 禁…

星巴克终止Odyssey Beta NFT计划

日前&#xff0c;咖啡品牌星巴克宣布将于3月31日终止其NFT产品Odyssey Beta客户忠诚度计划。这意味着&#xff0c;曾经旨在改进会员忠诚度的Web3 产品Starbucks Odyssey将终止&#xff0c;构筑多年的Web2会员系统“星享俱乐部”脱去了Web3外衣&#xff0c;回到了本来的面貌。 至…

体验分低导致闭店!抖音小店体验分是什么?教你如何提高体验分!

哈喽~我是电商月月 相信开抖音小店的伙伴们对体验分这个东西都不陌生&#xff0c;但如何有效的提高体验分你们知道吗&#xff1f; 今天&#xff0c;我就来讲讲抖音小店体验分低有什么后果&#xff0c;同时在后面说一下体验分降低如何提高&#xff01; 大家可根据情况不同自行…

羊大师羊奶靠谱么?品质保障深度解析

羊大师羊奶靠谱么&#xff1f;品质保障深度解析 羊大师羊奶&#xff0c;作为市场上的知名品牌&#xff0c;其靠谱性一直备受消费者关注。那么&#xff0c;羊大师羊奶究竟靠谱不靠谱呢&#xff1f;这就需要从品质保障和消费者信赖两个方面进行深入解析。 从品质保障的角度来看&…

【JAVA】数据类型与变量(主要学习与c语言不同之处)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 目标&#xff1a; 1. 字面常量 2. 数据类型 3. 变量 1.字面常量 在上节课 Hello…

Mysql的高级语句2

目录 引言&#xff1a; 一、按关键字进行排序 1、语句以及用法 2、先创建一个新的数据库以及数据表&#xff0c;并且导入内容 二、关键字排序操作 1、单个字段排序 ①按照分数进行排序&#xff0c;默认不指定就是升序排列 ②按照分数降序排列 ③结合where进行条件过滤…

C# LINQ笔记

C# LINQ笔记 from子句 foreach语句命令式指定了按顺序一个个访问集合中的项。from子句只是声明式地规定集合中的每个项都要访问&#xff0c;并没有指定顺序。foreach在遇到代码时就执行其主体。from子句什么也不执行&#xff0c;只有在遇到访问查询变量的语句时才会执行。 u…

【zlm】问题记录:chrome更新引起的拉不出webrtc; 证书校验引起的放几秒中断

目录 chrome更新引起的拉不出webrtc 证书校验引起的放几秒中断 chrome更新引起的拉不出webrtc 【zlm】最新的chrome版本中的报错&#xff1a; 我有个问题event.js:8 [RTCPusherPlayer] DOMException: Failed to execute setRemoteDescription on RTCPeerConnection: Failed …

太牛逼了!视频号下载器手机版(工具+方法)绝了

在众多的视频号下载中&#xff0c;可以说这个工具真的是很牛逼了&#xff01;这里问大家一个问题&#xff01; 你使用视频号下载工具以及视频号下载器都会不会因时间导致而失效呢&#xff1f; 自从小编使用了这款工具后&#xff0c;就不会因为视频失效而烦恼。 很多人免费推荐…

互斥锁与信号量的区别

信号量与互斥锁都是用于多线程编程中&#xff0c;以实现资源共享和线程同步的机制&#xff0c;但它们在应用场景、实现方式和性能特点上有所不同。以下是详细介绍&#xff1a; 应用场景。信号量主要用于线程同步&#xff0c;其核心思想是控制对共享资源的访问许可&#xff0c;…

javaWeb项目-快捷酒店信息管理系统功能介绍

开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 项目关键技术 1、JSP技术 JSP(Java…

Windows虚拟主机上的网站如何来设置默认首页

近期有网友咨询想要知道Windows虚拟主机上的网站如何来设置默认首页,以便后期他需要时可以自行处理。这边了解到他当前使用的是Hostease 的Windows 虚拟主机&#xff0c;而设置默认首页的操作步骤如下&#xff1a; 1.Hostease的Windows虚拟主机都是带Plesk面板的,因此需要先进入…

智慧公厕的先进技术应用

公共厕所一直以来都是城市管理中一个重要的工作&#xff0c;但设施老化、环境脏乱、服务质量低下等问题一直困扰着城市居民。然而&#xff0c;随着科技的进步和数字技术的应用&#xff0c;智慧公厕的建设正在改变这一现状。 智慧公厕通过对所在辖区内所有公共厕所的全域感知、…

面试经典150题【91-100】

文章目录 面试经典150题【91-100】70.爬楼梯198.打家劫舍139.单词拆分322.零钱兑换300.递增最长子序列77.组合46.全排列39.组合总和&#xff08;※&#xff09;22.括号生成79.单词搜索 面试经典150题【91-100】 五道一维dp题五道回溯题。 70.爬楼梯 从递归到动态规划 public …

详解Java 中的 Lambda 表达式

引言&#xff1a; Lambda 表达式是 Java 8 中引入的一个重要特性&#xff0c;它可以使代码更加简洁、易读&#xff0c;并且更加具有函数式编程风格。Lambda 表达式本质上是一个匿名函数&#xff0c;它可以作为方法参数传递&#xff0c;也可以直接赋值给一个变量。 一、Lambda 表…

Day20:LeedCode 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums …

【Rust】——提取函数消除重复代码和泛型

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Java项目:75 springboot房产销售系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 使用房产销售系统分为管理员和用户、销售经理三个角色的权限子模块。 管理员所能使用的功能主要有&#xff1a;首页、个人中心、用户管理、销售经理管…