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的文章。

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

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

相关文章

day34算法训练|贪心算法

1005.K次取反后最大化的数组和 两次贪心算法思路 1. 数组中有负数时&#xff0c;把绝对值最大的负数取反 2. 数组全为非负数时&#xff0c;一直取反最小的那个数 步骤&#xff1a; 第一步&#xff1a;将数组按照绝对值大小从大到小排序&#xff0c;注意要按照绝对值的大小…

云仓酒庄为您甄选西班牙葡萄酒

西班牙是一个拥有悠久葡萄酒酿造与饮用历史的国家&#xff0c;其葡萄酒产量位居世界第三位。云仓酒庄的品牌雷盛红酒分享翻开西班产区地图&#xff0c;不少葡萄酒刚入门的朋友会感到头疼&#xff0c;众多产区、分级制度、陈年标准&#xff0c;想要短时间内搞懂实在不容易。不用…

案例069:基于微信小程序的计算机实验室排课与查询系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

设计模式-状态(State)模式

目录 开发过程中的一些场景 状态模式的简单介绍 状态模式UML类图 类图讲解 适用场景 Java中的例子 案例讲解 什么是状态机 如何实现状态机 SpringBoot状态自动机 优点 缺点 与其他模式的区别 小结 开发过程中的一些场景 我们在平时的开发过程中&#xff0c;经常会…

【C语言(十五)】

动态内存管理 一、为什么要有动态内存分配? 我们已经掌握的内存开辟方式有&#xff1a; int val 20 ; // 在栈空间上开辟四个字节 char arr[ 10 ] { 0 }; // 在栈空间上开辟 10 个字节的连续空间 但是上述的开辟空间的方式有两个特点&#xff1a; • 空间开辟大小是固…

leetcode LCR 173. 点名

代码&#xff1a; class Solution {public int takeAttendance(int[] records) {int left0,rightrecords.length-1;while (left<right){int midleft(right-left)/2;if(midrecords[mid]){leftmid1;}else {rightmid;}}if(leftrecords[left]){return left1;}else {return left…

北斗三号短报文+4G的低功耗太阳能船载报位监控方案

国内海洋船舶群体长期在海上航行&#xff0c;多数海员由于海面无信号覆盖、个人卫星通信费用昂贵、无法自由使用船载公用卫星通信设备等原因&#xff0c;无法与家人和朋友保持联系&#xff0c;甚至在遇到危险的时候也无法及时向外界发出求救信号&#xff0c;管理单位难以掌握船…

新钛云服助力爱达邮轮·魔都号首航,保驾护航,共创辉煌

随着2024年1月1日的临近&#xff0c;中国首艘国产大型邮轮——爱达邮轮魔都号即将迎来激动人心的首航时刻。作为爱达邮轮的IT系统运维和安全服务伙伴&#xff0c;新钛云服有幸提前登船体验&#xff0c;并为魔都号即将到来的航行提供全面的技术支持与保障。 爱达魔都号&#xff…

微积分-三角函数2

三角函数 在上一节中&#xff0c;讨论了如何在直角三角形中定义三角函数&#xff0c;限制让我们扩展三角函数的定义域。 事实上我们可以取任意角的正弦和余弦&#xff0c;而不只是局限于 0 0 0~ π 2 \frac{\pi}{2} 2π​当中。 当然需要注意的是&#xff0c;正切函数对不是对…

Git使用rebase和merge区别

Git使用rebase和merge区别 模拟环境使用merge合并使用rebase 模拟环境 本地dev分支中DevTest增加addRole() 远程dev被同事提交增加了createResource() 使用merge合并 使用idea中merge解决冲突后, 推送远程dev后,日志图显示 使用rebase idea中使用功能rebase 解决冲突…

论文解读 | NeurIPS2023:「解释一切」图像概念解释器

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 讲者简介 孙奥&#xff1a; 香港科技大学软件安全实验室在读博士&#xff0c;研究兴趣为可解释性人工智能和可信机器学习&#xff0c;主要是从Post-hoc&#xff0c;逻辑和概念的角度分析神经网络的机理 Title 「…

IntelliJ IDEA 自带的 HTTP Client接口调用插件,替代 Postman

文章目录 引言建议目录结构新建请求不同环境的变量配置添加环境http-client.env.jsonhttp-client.private.env.json引用变量 请求示例Get请求示例Post请求示例鉴权示例断言示例Websocket请求示例 内置对象和动态变量内置对象&#xff1a;内置变量&#xff1a; 引言 在日常的 W…

Eslint 要被 Oxlint替换了吗

什么是 Oxlint 由于最近的rust在前端领域的崛起,基于rust的前端生态链遭到rust底层重构,最近又爆出OxLint,是一款基于Rust的linter工具。Oxlint在国外前端圈引起热烈讨论,很多大佬给出了高度评价。 事实上,Oxlint 是 Oxc 项目旗下的一款产品,专为 JavaScript 和 TypeSc…

Python轴承故障诊断 (七)基于EMD-CNN-LSTM的故障分类

目录 前言 1 经验模态分解EMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 2.3 故障数据的EMD分解可视化 2.4 故障数据的EMD分解预处理 3 基于EMD-CNN-LSTM的轴承故障诊断分类 3.1 训练数据、测试数据分组&#xff0c;数据分batch 3.…

TG-5510cb: txo高稳定性+105℃高温

TG-5510CB是一款高稳定性TCXO&#xff0c;可提供CMOS或限幅正弦输出&#xff0c;5G基站和边缘计算的额定温度为85C&#xff0c;需要室外安装、小型化和无风扇运行。与其他TCXO相比&#xff0c;实验室提供了许多改进&#xff0c;如低温度斜率和相位噪声。符合GR-1244-CORE地层3和…

ssm+vue的高校智能培训管理系统分析与设计(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校智能培训管理系统分析与设计&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

git 常见错误总结(会不断更新中。。)

常见错误 1. 配置部署key后git clone还是拉不下代码 执行以下命令 先添加 SSH 密钥到 SSH 代理&#xff1a; 如果你使用 SSH 代理&#xff08;例如 ssh-agent&#xff09;&#xff0c;将生成的私钥添加到代理中。 ssh-add ~/.ssh/gstplatrontend/id_rsa如果报错以下错误信息…

centos7下用yum安装包出现问题

原因&#xff1a; 这是因为yum采用Python作为命令解释器&#xff0c;这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现。而python版本之间兼容性不太好&#xff0c;使得2.X版本与3.0版本之间存在语法不一致问题。而CentOS 7自带的yum采用的是python2.7&#xff0c;当系…

3. cgal 示例 GIS (Geographic Information System)

GIS (Geographic Information System) 地理信息系统 原文地址: https://doc.cgal.org/latest/Manual/tuto_gis.html GIS 应用中使用的许多传感器&#xff08;例如激光雷达&#xff09;都会生成密集的点云。此类应用程序通常利用更先进的数据结构&#xff1a;例如&#xff0c;不…

车载以太网笔记

文章目录 以太网协议分层协议中间设备子网掩码物理层测试内容比较杂,后续会整理。 以太网协议分层 协议 中间设备