C++7(STL简介)

C++ - STL标准库 1.C++ STL标准库简介 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西” 的方法,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种 组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。 复用性必须建立在某种标准之上。但是在许多环境下,就连软件开发最基本的数据结构(data structures) 和算法(algori 阅读详情

📚 目录
1.【初识 STL】啥是 STL?先搞懂核心定位
2.【版本扫盲】不同 STL 版本咋回事?咱学哪个就行
3.【核心骨架】STL 六大组件:像搭积木一样理解
4.【为啥要学】笔试 / 面试 / 写代码都躲不开的原因
5.【学习路线】学 STL 的 3 个阶段,别瞎绕路
6.【避坑指南】STL 的小缺点,新手用的时候注意啥
7.【新手实操】必练的小例子,看完就能敲

1. 【初识 STL】啥是 STL?先搞懂核心定位
STL 的全称是standard template library(标准模板库),对新手来说,不用先抠 “模板” 这个复杂概念,简单理解就是:
C++ 大佬们已经写好的 “工具包”,里面装了常用的数据结构(比如数组、链表)和算法(比如排序、找东西),咱不用自己从零写,直接调就能用。
举个能懂的例子:
如果想存一组整数并排序,不用自己写排序函数,用 STL 的vector(存数据)+sort(排序算法)几行代码就能搞定,这就是 STL 的核心价值:

  • 省时间:不用重复造轮子,新手也能写出高效代码;
  • 够通用:一套工具能适配不同类型的数据(比如存 int、string 都能用);
  • 易上手:语法统一,学会一个容器的用法,其他的触类旁通。

2. 【版本扫盲】不同 STL 版本咋回事?咱学哪个就行
不用纠结所有版本,记住 “学哪个、用哪个” 就够了,先看一张表搞懂主流版本:
在这里插入图片描述
结论:日常写代码(不管 VS 还是 GCC)会用 STL 就行,学原理时重点看 SGI 版本,不用记所有版本细节。

3. 【核心骨架】STL 六大组件:像搭积木一样理解
STL 的六大组件就像一套积木,各有各的作用,拼在一起就能搭出各种功能。新手不用死记定义,用 “大白话 + 例子” 理解:
在这里插入图片描述
小技巧:先重点学 “容器 + 算法”,这俩是最常用的,迭代器跟着容器一起学(比如遍历 vector 时自然就会用迭代器),剩下的组件入门阶段不用深抠,先会用核心的就行。

4. 【为啥要学】笔试 / 面试 / 写代码都躲不开的原因

对新手来说,STL 不是 “可选技能”,而是必须掌握的核心,因为:
(1)写代码:新手也能快速写出靠谱代码
比如想统计一个班的成绩,用 vector 存成绩,sort 排序,find 找某个分数,几行代码就搞定,不用自己写数组扩容、排序算法,避免新手常犯的 “数组越界”“排序逻辑错” 等问题。

// 新手实操例子:用STL统计成绩
#include <iostream>
#include <vector>   // 容器头文件
#include <algorithm> // 算法头文件
using namespace std;

int main() {
    // 1. 用vector存成绩(不用管数组大小,自动扩容)
    vector<int> scores = {85, 92, 78, 90, 88};
    // 2. 排序(直接调sort,不用自己写冒泡/快排)
    sort(scores.begin(), scores.end());
    // 3. 找分数90(直接调find,不用遍历判断)
    auto it = find(scores.begin(), scores.end(), 90);
    if (it != scores.end()) {
        cout << "找到90分,位置:" << it - scores.begin() << endl;
    }
    // 4. 遍历输出(迭代器遍历,新手也不会越界)
    for (auto score : scores) { // C++11简化写法,新手友好
        cout << score << " ";
    }
    return 0;
}

(2)笔试:新手能拿分的高频题都靠 STL
笔试常考的 “基础题”,用 STL 能快速搞定,比如:

  • 用 vector + 栈实现 “括号匹配”;
  • 用 map 统计字符串中每个字符出现的次数;
  • 用 deque 实现 “滑动窗口”(新手入门级)。
    (3)面试:新手必答的 STL 基础题
    面试官不会一上来问底层,只会问新手能答的基础题,比如:
  • “vector 和数组有啥区别?”(答:vector 自动扩容,不用手动管大小);
  • “sort 怎么用?能按降序排吗?”(答:默认升序,加 greater() 就能降序);
  • “遍历 vector 有几种方法?”(答:下标、迭代器、范围 for,新手优先用范围 for)。

5. 【学习路线】学 STL 的 3 个阶段,别瞎绕路
新手学 STL 最容易犯的错:一上来就抠源码,结果越学越懵。按这 3 个阶段来,循序渐进:
阶段 1:会用(入门 1-2 周)
核心目标:能叫出常用容器 / 算法的名字,会写简单代码。

  • 先学 3 个核心容器:vector(最常用)、string(字符串)、map(键值对);
  • 先学 5 个核心算法:sort(排序)、find(查找)、swap(交换)、reverse(反转)、count(计数);
  • 练习:用 STL 做小任务(统计字符、排序成绩、查找元素)。

阶段 2:懂点原理(入门 1 个月后)
核心目标:知道 “为啥这么用”,不是只记语法。

  • 比如:知道 vector 的 “扩容规则”(满了之后一般扩 1.5 倍或 2 倍,避免频繁扩容);
  • 比如:知道 sort 默认用 “快速排序”,效率高;
  • 比如:知道迭代器的 “失效问题”(比如 vector 扩容后,原来的迭代器就不能用了)。

阶段 3:能扩展(入门 3 个月后)
核心目标:根据需求改 STL 的用法,比如自定义排序规则、自定义容器。

  • 比如:给 sort 传仿函数,按自定义规则排序(比如按成绩降序、按字符串长度排序);
  • 比如:用配接器把 vector 改成栈(stack),实现先进后出。
    ✅ 新手推荐书单:《C++ Primer》(新手入门)+《STL 源码剖析》(进阶看),前者学用法,后者懂原理,不用一开始就看源码书。

6. 【避坑指南】STL 的小缺点,用的时候注意啥
STL 很好用,但新手容易踩坑,记住这几个 “避坑点”:
(1)线程不安全
新手如果写多线程代码,用 STL 容器时要手动加锁!比如多个线程同时往 vector 里加数据,会出问题,新手可以先学单线程的用法,多线程后续再补。
(2)别滥用 vector
新手总觉得 vector 万能,但如果频繁插入 / 删除数据(比如在中间插元素),用 list 更合适(vector 中间插入要移动元素,效率低)。
(3)注意内存膨胀
比如用 vector、vector、vector,编译器会生成多份代码,导致程序变大,但新手阶段不用在意,项目上线前再优化就行。
(4)C++ 版本要注意
新手尽量用 C++11 及以上版本,比如范围 for、nullptr(代替 NULL)、auto 关键字,这些语法让 STL 用起来更简单,避免用老旧的 C++98 语法。

7. 【实操】入门必练的小例子,看完就能敲
光看没用,一定要敲这几个例子,练熟基础用法:
例子 1:用 vector+sort 实现成绩降序排序

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> scores = {75, 88, 99, 60, 85};
    // 降序排序(新手重点:greater<int>()的用法)
    sort(scores.begin(), scores.end(), greater<int>());
    cout << "降序成绩:";
    for (auto s : scores) {
        cout << s << " ";
    }
    return 0;
}

例子 2:用 map 统计字符串中字符出现次数

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main() {
    string str = "hello c++ stl";
    map<char, int> count_map; // 键:字符,值:次数
    for (char c : str) {
        count_map[c]++; // 新手重点:自动计数,不存在的键会默认初始化为0
    }
    // 遍历输出
    for (auto pair : count_map) {
        cout << pair.first << ":" << pair.second << "次" << endl;
    }
    return 0;
}

例子 3:用 reverse 反转字符串

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string s = "hello stl";
    reverse(s.begin(), s.end()); // 反转字符串
    cout << "反转后:" << s << endl;
    return 0;
}

总结
1.STL 对新手来说就是 “现成的工具包”,先学vector+sort+map这三个核心,能解决 80% 的入门场景问题;
2.学习路线别搞反:先会用(敲例子)→ 再懂原理(知道为啥)→ 最后扩展(自定义),别一上来抠源码;
3.避坑重点:vector 中间插入效率低、多线程用 STL 要加锁、优先用 C++11 的简化语法(范围 for、auto)。

C++之STL 一、STL简介       从根本上说,STL ( Standard Template Library,标准模板库)是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,在C++标准中,STL被组织为下面的17个头文件:algorithm>、deque>、functional>、iterator>、arra 阅读详情

相关推荐

STL(标准模板库)

概念: STL:标准模板库,是C++标准库的重要组成部分 由概念便可以知道,STL中的所有数据结构都是以模板的方式创建的 LIST--container: list节点: list节点是一个双向指针,实质是一个模板结构体 template<class T> struct _list_node { typedef void* void_pointer; void_pointer prev;//previous void_pointer next;

m0_60274660的博客 2万+

【C++】 STL详解

【C++】 STL详解

m0_56051805的博客 3万+

DOTween回调函数的隐藏技巧:优化你的Unity动画流程

本文深入探讨了DOTween回调函数在Unity动画开发中的高级应用技巧,帮助开发者优化动画流程。通过分析回调机制、链式应用模式和大规模动画系统管理,提升性能与可维护性,特别适合需要高效处理复杂动画场景的Unity开发者。

weixin_27945229的博客 319

【C++初阶:STL简介】

STL (standard template libaray - 标准模板库):是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。JAVA 中也有对应的语法,叫做集合类。

DanceBit的博客 2611

数通基础(基本网络通信原理、IP地址如何配置、DHCP、DNS域名系统、路由技术基础、静态路由 、TCP和UDP、vlan虚拟局域网、trunk、三层交换)

我们知道了1、电脑开机,通过dhcp获取ip地址2、电脑输入域名,www.baidu.com电脑把www.baidu.com发到自己的dns服务器3、dns服务器把域名解析成对应的ip地址4、电脑向百度服务器发送一个请求。

qq_53235556的博客 6481

深入Linux内核:PTP硬件时间戳(HW Timestamp)是如何炼成的?

本文深入探讨了Linux内核中PTP硬件时间戳(HW Timestamp)的实现原理与实战应用。通过分析IEEE 1588协议在网络时间同步中的关键作用,详细解析了硬件时间戳在Linux内核中的架构设计、驱动开发及性能优化技巧,帮助开发者实现纳秒级精度的时间同步。

weixin_30727835的博客 651

【C++】7. STL 简介

本文介绍了STL的概念、分类、以及如何去学习

2301_80475881的博客 408

传感器应用案例:压力传感器在工业自动化中的应用_(13).压力传感器的数据采集与处理

数据采集系统(Data Acquisition System, DAS)是连接传感器和控制系统的重要桥梁。它包括硬件(如数据采集卡、信号调理器)和软件(如数据采集软件、数据处理算法)两部分。信号调理:将传感器输出的模拟信号转换为适合AD转换的信号。AD转换:将模拟信号转换为数字信号。数据传输:将数字信号传输到控制系统或上位机。存储:将采集的数据存储在本地或远程数据库中。实时性:保证数据的实时性和准确性。压力传感器的数据采集与处理是工业自动化中不可或缺的一部分。

2401_87715305的博客 1620

【C++】7:STL简介

STL是C++标准模板库,包含数据结构和算法框架。其原始版本由HP实验室开发并开源,随后衍生出P.J.(Visual C++)、RW(C++ Builder)和SGI(GCC/Linux)等版本,其中SGI版本可读性最佳。STL由六大组件构成,是C++开发的核心工具,能显著提升开发效率。学习STL可分两个阶段:先熟练使用,再深入理解其泛型编程原理和实现细节。

qq_62473190的博客 513

写给开发人员的实用密码学 - Hash算法

说到Hash(哈希),开发人员应该不陌生,比如Hash表是一种非常常用的数据结构,通过Hash表能够根据键值快速找到数据。哈希函数将文本(或其他数据)映射为整数,从而能够提高检索效率。密...

云水木石 1503

9.27华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

9.26华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

算法大师! 499

【C++初阶】:(7)STL简介

比如我们要给vector降序排序,直接把greater<int>()传给sort。

2501_90703620的博客 583

AI 大模型应用数据中心的数据清洗工具

1. 背景介绍 在人工智能大模型应用的浪潮中,数据清洗作为数据预处理的重要环节,对于提升模型性能和可靠性具有至关重要的作用。数据中心作为人工智能模型的运行环境,面临着海量数据流和多样化的数据类型,如何高效、准确地进行数据清洗,成为应用大模型的关键问题之一。本文将详细介绍AI大模型应用数据中心的数据清洗工具,包括核心概念、算法原理、具体操作步骤、应用场

SuperAGI2025 1804

C++初阶 - 7.STL简介

1.什么是STL 2.STL的版本 3.STL的六大组件 4.STL的重要性 5.如何学习STL 6.STL的缺陷

weixin_52872520的博客 672

insightface scrfd人脸检测测试

pip install mmdet 自动安装mmcv win10上可以,服务器上没成功

jacke121的专栏 4022

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

c++ - 第7节 - STL简介

目录1. 什么是STL2.STL的版本3.STL的六大组件4.如何学习STL5.STL的缺陷简单总结一下:学习STL的三个境界:能用,明理,能扩展

qq_45113223的博客 253

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++基础(7)——STL简介及string类

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。string();//构造一个空字符串//用C-string构造string类//用C-string的前n个字符构造string类//用n个c字符构造string类//拷贝构造//用从pos位置开始的长度为len的字串来构造string类string s1;

2301_80065652的博客 1617

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C++】-7- STL简介

STL简介

fantastic_13_7的博客 115

从零开始学C++之STL(四):算法简介、7种算法分类

一、算法 算法是以函数模板的形式实现的。常用的算法涉及到比较、交换、查找、搜索、复制、修改、移除、反转、排序、合并等等。 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用。 算法的优势在于只需实作一份,可以适应所有的容器,不必为每一种容器量订制。也可以与用户定义的容器搭配。 算法尾词: _if 比如find(按某个值来查找),find_i

Meditation 4336

C++的STL简介

vector变量名;类型名:int ,double, char, struct, STL容器(vector,set,queue)// > >之间要加空格vector数组就是一个一维数组,如果定义成vector数组的数组,就是二维数组(低维是高维的地址)二维数组中,一维形式就是地址。int main()//输出arr第一行的地址return 0;set变量名;

bingbingaidaima的博客 3273

【c++】标准模板库STL入门简介与常见用法

一、STL简介 1、什么是STL STL(Standard Template Library)标准模板库,主要由容器、迭代器、算法、函数对象、内存分配器和适配器六大部分组成。STL已是标准C++的一部分,使用STL开发系统可以提高开发效率。 2、容器(Containers) 容器类是可以包含其它对象的模板类,如向量类(vector)、链表类(list)、双向队列类(deque)、集合类(s...

monk1992的博客 292

C++ STL简介

在软件开发的演变过程中,程序设计语言的进步往往伴随着新的技术和方法的出现,以更高效地解决问题和提升性能。C++语言的发展尤为引人注目,它不仅从C语言继承了高效和灵活的特性,还引入了面向对象和泛型编程的强大功能。特别是标准模板库(Standard Template Library,STL)的引入,标志着C++从其前身C语言的一大飞跃。在本文中,我们将走进STL的世界,了解它如何使C++编程变得更加高效和强大。

wxk2227814847的博客 1497

【C++】STL简介 及 string的使用详解

STL简介 及 string的使用讲解

m0_70980326的博客 4007

C++的STL简介(一)

STL(standarf template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2302_81171591的博客 2414

STL教程:C++ STL快速入门

1.STL引言 STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列...

梦心之魂的博客 1万+

C++初阶之模板和STL简介

template < class T1 , class T2 , . . . , class Tn > class 类模板名 {// 类内成员定义 };比如下面使用模板实现的栈类public :_top = 0;-- _top;// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表 template < class T > void Stack < T > :: Push(const T & x) {

立志做一个高产且细节博主 1254
上一篇: 初阶linux1(常见指令以及权限理解)
下一篇: C++8(string类)
code_whiter
博客等级 码龄2年 289粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值