C++中STL的概念——零基础/小白向,适合竞赛,初学C++者使用

目录

1.STL的诞生

2. STL的基本概念

3. STL六大组件

4. STL容器,算法,迭代器

容器:存放数据的地方

算法:解决问题的方法

迭代器:容器和算法之间的桥梁

5. STL初始:打印0 ~ 9 的数字


        这篇文章是一篇开头文章,主要的目的就是带你了解什么是STL,知道里面的内容,并用STL写一段简单的代码,并不会涉及其他复杂的内容,日后,我们也会不断更新STL里面的相关内容,可以收藏专栏,了解并学习。

1.STL的诞生

        如果能使用过C语言,那么你一直很苦恼写一些重复的东西,不断的在造轮子,使得代码跑起来,因此,软件界一直希望建立一种可重复利用的东西。C++的面向对象和泛型编程思想,目的就是复用性的提升,大多数情况下,数据结构和算法没有一套标准,导致被迫从事大量重复的工作,为了建立数据结构和算法的标准,诞生了STL。

        之后的文章中,可以关注这个C++STL专栏,其中我们对STL中国的容器和算法进行讲解,其中,我们也会有底层代码的实现,帮助你更好的理解STL中的数据结构和算法。

2. STL的基本概念

        STL(Standard Template Library,标准模板库),STL从广义上分为 : 算法(algorithm)容器(container)和迭代器(iterator),其中,这三个英文单词你要能够认识,当然你也不需要刻意去背,通过之后不断地敲代码,你就可以记住。

        容器 和 算法之间通过迭代器进行无缝连接。STL几乎所有代码都采用模板类或者模板函数。

3. STL六大组件

        分为:容器,算法,迭代器,仿函数,适配器(配接器),空间配置器

        1.容器:各种数据结构,如vector,list,deque,set,map等,来存放数据。

        2. 算法:各种常用算法,如sort,find,copy,for_each等。

        3.迭代器:扮演了容器与算法之间的胶合剂。

        5.适配器:一种来修饰容器或者仿函数或迭代器接口的东西。

        6.空间配置器:负责空间的配置与管理。

        这里如果你只是初学STL,或者目前准备竞赛,你只要了解前三个就可以了,日后,当你想成为一名C++工程师的时候,STL的六大组件可能就是你面试要准备一些的东西了,你要了解它们的关系与应用等

4. STL容器,算法,迭代器

容器:存放数据的地方

                STL的容器就是将运用最广泛的一些数据结构实现出来。当你要是用STL中相关容器时,你需要包含相应的头文件。

                产常用的数据结构:数组(线性表),链表,栈,队列,树,集合,映射表等

                这些容器分为序列式容器关联式容器

                    序列式容器:强调值的顺序,序列式容器的每个元素都有固定的位置。

                    关联式容器:二叉树结构,各元素之间没有严格上的顺序关系。

算法:解决问题的方法

迭代器:容器和算法之间的桥梁

        提供一种方法,其能后访问容器中的元素,而又不暴露容器的内部表示方法。

        每个容器都有自己专属的迭代器,目前,你可以将迭代器简单的理解为指针。

        迭代器的种类:

           

        如果你还没有学过数据结构和算法,想要更详细快速的学习数据结构和算法,可以阅读数据结构的专栏里面的文章,当然你也可以一边学习STL,边学习数据结构,在之后的文章里,我们在学习不同容器时,也会展示给你对应的理论的底层代码,如果你有时间,可以自己实现。

5. STL初始:打印0 ~ 9 的数字

        相信你一定会这中简单的代码,不要紧,我们一步步来,先用数组来写一段代码

#include <iostream>
using namespace std;
int main()
{for(int i =0;i < 10 ; i++){cout<<i<<endl;}return 0;
}

        这是一段非常简单的代码,如果我们想用STL中的内容来做呢,这里我们介绍一个容器,vecor,和数组非常相似,称为单端数组,你目前可以简单的理解为可动态扩展的数组。

        1. 创建vector容器

        需要注意的是,当你想用vector容器时,你需要先引用头文件,#include <vector>

vector<int> v;

        如果你学过模板和类的话,这里int就可以是个T,当然如果你没学过,你就可以简单的理解为数据类型,如果你想存浮点型,<>里面放double就可以。

        2. 存数据

for(int i = 0; i < 10 ; i++)
{v.push_back(i);
}

       v.push_back 就是将数据插入vector数组的尾部,就是尾插。

        如果你没学过模板和类,可能不太理解,当然没关系,这里你可以将push_back理解为容器的接口,STL中每个容器都有相关的接口,使用这些接口,可以满足我们的需求。

        3. 打印

for(vector<int>::iterator i = v.begin() ; i!= v.end() ;i++)
{cout<< *i <<endl;
}

        这里我们就是先创建一个vector的迭代器,之前我们说过,现在现将迭代器理解为指针,这里我们先让它指向首元素的地址,然后我们解引用,就能得到这个元素。v.begin()你就可以理解为返回vector首元素的地址,赋值给i,v.end()可以理解为微元素的下一个节点。

        4. 完整代码

int main()
{vector<int> v;for (int i = 0;i < 10;i++){v.push_back(i);}for (vector<int>::iterator i = v.begin();i != v.end();i++){cout << *i << endl;}return 0;
}

        这样我们就将容器和迭代器,有了一定的了解,当然如果上述代码阅读起来有困难也没关系,这里你只需要有个印象,随着日后的不断学习,你会对这些有更深刻的理解,你也可以关注专栏,阅读学习日后STL的文章。

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

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

相关文章

武林风云之linux组软raid0

小y可喜欢玩文明系列的游戏了&#xff0c;因为小y也一直喜欢造轮子&#xff0c;属于自己的轮子。 每次小y听到”要向雄鹰一样&#xff0c;定要遨游于天际。”感觉自己给自己打了一针强心剂&#xff0c;要求自己拼搏进取。 众所周知&#xff0c;文明是个原生的linux游戏&#xf…

大创项目推荐 深度学习 opencv python 实现中国交通标志识别_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

架构设计系列之常见架构(二)

五、DDD&#xff08;领域驱动设计&#xff09; 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;是一种开发思想&#xff0c;强调将软件系统的注意力集中在业务领域上&#xff0c;将领域视为应用的核心。在架构设计中&#xff0c;DDD 提供了一种不同…

提前预警,时刻守护:迅软DLP的数据安全先锋

许多数据泄密事件的发生&#xff0c;往往都是由于没有在案发事前做好安全保护&#xff0c;使得重要信息被随意攻击、盗取、泄密。比起在危机发生后亡羊补牢&#xff0c;更重要的是应该在案发之前未雨绸缪。迅软DLP作为迅软股份研发的“重磅选手”&#xff0c;可为政企单位在一切…

Spring Boot整合Sharding-JDBC实现数据脱敏

目录 背景ShardingSphere脱敏规则sharding-jdbc数据脱敏数据脱敏配置数据分片 数据脱敏配置 背景 对互联网公司、传统行业来说&#xff0c;数据安全一直是极为重视和敏感的话题。数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形&#xff0c;实现敏感隐私数据的可靠保护…

华为配置VRRP负载分担示例

组网需求 如图1所示&#xff0c;HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力&#xff0c;HostA以SwitchA为默认网关接入Internet&#xff0c;SwitchB作为备份网关&#xff1b;HostC以SwitchB为默认网关接入Internet&#xff0c;Switc…

深入理解网络 I/O:单 Selector 多线程|单线程模型

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

自动化测试框架Playwright安装以及使用

最近&#xff0c;微软开源了一个非常强大的自动化项目叫 playwright-python 它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行&#xff0c;并提供了同步、异步的 API&#xff0c;可以结…

Python 实现:OCR在图片中提取文字(基于Gradio实现)

Paddle OCR PaddleOCR 基于深度学习技术实现的&#xff0c;使用十分简单。 先看效果 可以看出来识别效果还是不错的&#xff0c;里面的“湿”字识别成了繁体字。如果不是连体字&#xff0c;就不会出现这个问题。 1.测试环境 操作系统&#xff1a;Win10 Python&#xff1a;3…

对BIOS进行简单快速的设置更改,就能启用安全引导来安装Windows 11

本文介绍如何在UEFI/BIOS中启用安全引导&#xff0c;以便继续安装Windows 11。 如何启用安全引导 启用安全引导最简单的方法是通过UEFI/BIOS进行。它通常被列为BIOS中的众多选项之一&#xff0c;因此你只需打开它即可启用它。 1、启动&#xff0c;或重新启动你的电脑或笔记本…

Domino万物可订阅

大家好&#xff0c;才是真的好。 如果你还不知道什么是RSS&#xff0c;从V站截图一份放到这里供大家参考&#xff1a; 其实&#xff0c;Domino上也可以很简单地发布RSS站点&#xff0c;以供内部或外部用户订阅。 前面其实我们说了不少关于Notes客户端的RSS订阅功能&#xff…

人工智能驱动的智慧城市:科技之光照亮未来城市发展

导言 人工智能在智慧城市建设中扮演着关键角色&#xff0c;通过智能化、自动化的手段&#xff0c;为城市提供高效、智能的管理和服务。本文将深入研究人工智能在智慧城市中的应用、创新技术以及对城市未来发展的引领作用。 智慧城市是利用先进的信息技术和大数据分析手…

nodejs+vue+微信小程序+python+PHP邮件分类系统的设计与实现-计算机毕业设计推荐

运用现代化信息技术手段加强电子邮件的管理&#xff0c;可以大大地降低管理工作量加快收集信息的速度&#xff0c;通过加强管理&#xff0c;保护电子邮件完整无缺&#xff0c;过滤垃圾邮件&#xff0c;节省办公时间。 论文先介绍当前邮件分类系统的现状&#xff0c;然后调研开发…

jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱

前言 个人其实一直的不太喜欢用邮箱发送报告&#xff0c;测试报告用邮件通知这都是五六年前的事情了&#xff0c;但有部分小伙伴依然执着于发邮件报告通知。 这里整理了下发邮箱通知的教程。 配置你的邮箱 配置邮箱这一步最繁琐&#xff0c;由于每个人使用的邮箱不一样&…

Qt容器QScrollArea小部件的滚动视图

​# QScrollArea 平台:linux、windows、mac皆可,Qt版本:Qt5.14.2 QScrollArea是Qt框架中用于提供可滚动视图区域的小部件。它通常被用来包含一个较大的内容区域,并且可以在其中嵌入其他小部件。下面是一些常用的QScrollArea函数: 1. `setWidget(QWidget *widget)`: 设置在…

机器学习支持向量机(SVM)

svm与logstic异同 svm支持向量机&#xff0c;因其英文名为support vector machine&#xff0c;故一般简称SVM&#xff0c;通俗来讲&#xff0c;它是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;其学习策略便是间隔最大化&#x…

微服务保护--熔断降级

1.熔断降级介绍 熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例、慢请求比例&#xff0c;如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求&#xff1b;而当服务恢复时&#xff0c;断路器会放行访问该服务的请求。 断路器控制熔断和放行…

3小时快速入门自动化测试 —— Selenium测试工具

自动化测试 自动化测试简单来说就是利用自动化测试工具和自动化测试脚本来完成指定的测试任务&#xff0c;测试启动过程无需人工参与&#xff0c;但自动化测试之前的准备工作需要人工手动配置好。它是一种将重复性、繁琐的测试任务交给计算机自动执行的方法&#xff0c;能够显…

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

【采坑分享】npm login/publish/whoami失败采坑,解决npmERR426、ETIMEDOUT、ECONNREFUSED等错误

目录 前言背景&#xff1a; 采坑之路&#xff1a; 1.修改https为http&#xff0c;问题还在 2.修改为淘宝镜像&#xff0c;问题还在 3.修改为官网地址&#xff0c;问题还在 4.升级node和npm&#xff0c;问题还在 5.猜想网络问题&#xff0c;问题解决 采坑总结&#xff1a…