STL使用入门( Using STL)

【STL详解】STL标准模板库入门 | STL版本 | STL六大组件 | STL优点 | 常用STL容器vector、list和map | STL算法函数 | STL使用异常原因分析与总结 本文详细介绍STL标准模板库相关的内容,包括STL版本、STL六大组件、STL优点、常用的STL容器vector、list与map、提升效率的STL算法函数的使用、STL使用异常常见原因分析与总结等,以供大家参考。 阅读详情

STL使用入门( Using STL)

作者:Zoran M. Todorovic
原文: Using STL.
翻译: Winter

0 前面的话(Winter)

C++已经在中国相当普及,但C++ STL却使用的人不多。许多人有一定成见,认为STL降低了C++的效率。特别是那些自诩为技术专家的人,他们一直使用C语言,对于新事物总是先用批判的眼光对待......先不说这些,我这几天看见 http://stl.winterxy.com网站上的这篇小文,发现写得简明扼要,通俗易懂。翻译出来,希望对STL的普及有一定帮助。

1 介绍

我最开始结束C++编程是从DOS下的Borland C++开始的。那时他们在最新版本3.1中就包含了一套模板库用来做collection.那真是个好东东。当我开始使用Visual C++ 2.2的时候,我甚至试图去把Borland公司的collection模板库嵌入到Visual C++中去,但是没有成功。唯一可行的解决方案是切换到微软(Microsoft)的collection上,它是MFC的一部分分。但总是有些问题,其原因如下:

  • 一旦实现部分已经代码写完,很难从一种容器(container)类型切换到另外一种容器。
  • 不同容器的迭代器(Iterators)不一样。
  • 如果你在写一个DLL(动态链接库), 服务程序(service)或者终端应用程序,需要用到容器,你要么动态要么静态链接MFC,这使得你不得不依赖于MFC.

最近我开始使用STL,发现它真是太棒了!入门可能稍微难一些,但一旦你开始了,它就变得非常容易。本文包含了一些使用STL的入门经验,主要是面向那些希望能快速使用STL又不想了解那些琐碎细节的程序员。

2 规则

Rule 1:

你可以生成STL容器,用来存放对象或者指向对象的指针。

class TMyClass;
typedef list<TMyClass> TMyClassList;     // 用于存放对象的list容器
typedef list<TMyClass*> TMyClassPtrList; // 用于存放对象指针的list容器
一般来说,list容器用于存放对象。但是,如果你是需要保存一些机器资源(例如,文件句柄,命名管道、套接字(socket)或者其他类似的资源),那么你需要使用list来保存指向这些对象的指针。

如果容器是保存的对象,则在容器析构的时候会自动清理这些对象。但,如果它保存的是对象的指针,删除指针就应该是程序员的责任了。

Rule 2

对需要保存到容器中的对象的类型来说,每个类都必须至少实现拷贝构造函数,最好还能重载赋值操作符。

class TMyClass {
        private:
        ...
        public:
        TMyClass(..);
        
        // 拷贝构造函数
        TMyClass(const TMyClass& obj)  { *this = obj; }
        
        // 赋值操作符
        TMyClass& operator=(const TMyClass& obj);    
        ...
};
当你把一个对象的实例插入到容器中,STL会自己重新生成一个此对象的拷贝,因此拷贝构造函数就成为必须的了。如果你没有为拷贝构造函数写正确的代码,就有可能造成list中对象的某些数据成员没有初始化。

Rule 3:

按照下列方式把一个对象插入到容器中:

TMyClass object;
TMyClassList myList;
TMyClassList::iterator it;

it = myList.insert(myList.end(), object);
TMyClass *pObject = &(*it);
上面的例子显示了如何把一个对象插入容器中,并得到这个在容器中的对象的指针。由于容器将会为这个对象产生一个新的拷贝,原始的那个对象实例就不再使用了,因此得到其指针是很有必要的。若你是用list来保存指针,这个操作就没有多大必要了,因为原始的指针会被保存到容器中。

Rule 4:

通过下面的方式,使用迭代器遍历整个容器:

TMyClassList::iterator it;
TMyClass *pObject;
for (it = myList.begin(); it != myList.end(); it ++) {
        pObject = &(*it);
        // 使用 pObject 
}
不过,若你是用容器来保存对象的指针,上面的代码需要做如下修改:
TMyClassList::iterator it;
TMyClass *pObject;
for (it = myList.begin(); it != myList.end(); it ++) {
        pObject = *it;
        // 使用 pObject 
}
Rule 5:

按照下面的方法可以删除容器中的元素:

TMyClassList::iterator it;
TMyClass *pObject;
for (it = myList.begin(); it != myList.end(); it ++) {
        pObject = &(*it);
        if (pObject 满足某些删除的标注) then
        myList.erase(it);
        // 若list里面保存的是指针,那么增加下面代码
        delete pObject;
}
容器不会删除其保存的指针,需要手动删除,因此再上面代码中增加了额外一行。

3 结论

STL中唯一缺少的一个函数就是CString::Format() .
Using STL PDF Using STL,非常详细的介绍如何使用C++的STL库,帮助你在短时间内掌握最强大的基础函数库 立即下载

相关推荐

走进stl (using stl)

本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.

《三十分钟掌握STL》(stl迭代器高级应用)

注:本文来自一部pdf电子书,我这只是将原文直接copy到这里,给大家分享一下,我看完后感觉收获很大。 《三十分钟掌握STL》 译者:kary 电子书制作:冷寒生 contact:karymay@163.net 这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没 有对翻译出来的内容校验过。如果你没法在三十分钟内觉得

风叶 2065

using stl

using stl 译者:kary<br><br>contact:karymay@163.net<br>从网上获得

STL使用入门( Using STL) 【转贴】

STL使用入门( Using STL) 作者:Zoran M. Todorovic原文:Using STL.翻译:Winter 0 前面的话(Winter) C++已经在中国相当普及,但C++ STL却使用的人不多。许多人有一定成见,认为STL降低了C++的效率。特别是那些自诩为技术专家的人,他们一直使用C语言,对于新事物总是先用批判的眼光对待......先不说这些,我这几天看见http://st

一兰阳光 1047

三十分钟掌握STL《using stl》

三十分钟掌握STL 这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。 译者:kary

Using STL译本

《Using STL》的译本,文中有本人阅读的标记,希望能和大家共同分享,目录是本人按照自己的理解添加的,请指正。谢谢

三十分钟掌握STL

这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。 译者:karycontact:karymay@163.netSTL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使

2700

Docker部署 SRS rtmp/flv流媒体服务器

SRS(Simple Realtime Server)是一款开源的流媒体服务器,具有高性能、高可靠性、高灵活性的特点,能够支持直播、点播、转码等多种流媒体应用场景。SRS 不仅提供了流媒体服务器,还提供了适用于多种平台的客户端 SDK 和在线转码等辅助服务,是一款十分强大的流媒体解决方案。

m0_56659620的博客 4869

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

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

梦心之魂的博客 1万+

Virtuoso ADE Explorer实战技巧:从基础操作到高级仿真

本文深入解析了Virtuoso ADE Explorer在模拟电路仿真中的核心价值与实战技巧。作为Cadence平台的专业工具,它专为高效、系统化的设计空间探索而生,能大幅提升PVT验证、参数扫描和蒙特卡洛分析的效率。文章从基础界面操作、并行仿真管理,到高级的参数扫描、数据报告生成及蒙特卡洛结果深度剖析,提供了全面的避坑指南与工作流优化建议,帮助工程师从重复劳动中解放,专注于电路设计与性能优化。

ios99的博客 899

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps

香橙派5采用了RK3588S,内置的NPU达到了6Tops的算力,博主这里记录一下自己的踩坑过程,好不容易做出来的不能以后忘记了(手动狗头)。这里博主还在B站上发布了效果视频,大家感兴趣的话可以看一下。其中解决了先验框标注位置不对,或者出现非常多的框的问题

weixin_51651698的博客 2万+

一文带你轻松入门STL

学习STL的意义 STL即Standard Template Library(标准模板库),是C++的一部分 (C++ = C + 类 + 模板(STL), C++编译器都支持STL,不需要单独安装),不会STL不算C++程序员。 STL里面封装了很多经典的算法,再加上是基于模板的,适用于多种数据类型,某种程度上说是通用算法,所以 它在C++中的地位很高。 入门STL的痛点 1. 看书入门STL 像 《C++ primer plus》 这类书侧重于对语言语法知识的讲解,没有系统、全面讲解STL的具体用法、

Quan的博客 2279

用VINS-Fusion跑通EuRoC数据集:Ubuntu22.04+ROS2环境下的保姆级评测指南

本文详细介绍了在Ubuntu22.04和ROS2 Humble环境下使用VINS-Fusion处理EuRoC数据集的完整流程。从环境配置、数据集转换到参数调优和性能评估,提供了一套全面的多传感器融合分析方案,帮助开发者在无人机精准定位场景中实现高效部署与优化。

weixin_29212867的博客 517

C++和Java中STL库入门

C++和Java中STL库入门STL简介为什么使用STLSTL基本概念STL使用前的初始化C++里STL基本容器详解 STL简介 STL简称标准模版库,被容纳在C++标准程序库,包含了许多基本数据结构和基本算法,使程序员写起来得心应手。 为什么使用STL 在学习数据结构的时候,在程序中会使用到堆、栈、队列、链表等一些基本的算法,而学习数据结构的时候,这些基本算法写起来十分繁琐,如果不想写这些,那么就可以考虑一下STL了。 但是不要太过于依赖STL! STL基本概念 要使用STL,需要理解以下几个基本概念:

狙击美佐的博客 3691

AGX Orin设计-外围电路设计之一

AGX ORIN是英伟达Jetson系列中算力规格最高端的模组,其高达200TOPS/275TOPS的算力可以为各类场景提供澎湃的算力支持,本篇文章针对AGX ORIN的常规外围电路设计做分析描述。

zhiyuchenkeji的博客 4477

嵌入式状态机编程-QP状态机框架与常见状态机方法

状态机基本术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。 传统有限状态机Fsm实现方法 如图,是一个定时计数器,计数器存在两种状态,一种为设置状态,一种为计时状态 设

qq_36969440的博客 9665

STL入门指南

初识STL

天行健、君子以自强不息 5772

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 629

在Linux下使用STL快速入门

     STL是Standard Template Library的简称,也即标准模板库,是一个具有工业强度的,高效的C++程序库。有关使用库的好处自不必多说,这里大致的讲述一下STL的相关知识和如何在Linux下使用STL; 下面首先给出这几篇文章,都是介绍STL入门的极佳导学文章-- C++ STL轻松导学STL简介A modest STL tut

技术收藏 1161

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 中英文折行保存函数
下一篇: 关于第一次跳槽
dingdingko
博客等级 码龄20年 50粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值