STL学习小记--起因

简介: 起因是我在尝试Win8的时候做的一个小程序,我将它上传到了网上。于是有一个学生来找我学习,但我的C#造诣仅仅只是一本《C#与.NET4高级程序设计》,然后有一天他们的老师布置给他们一个关于C#模板的作业的时候,我对一直以来的机械式函数使用产生了疑惑。

起因是我在尝试Win8的时候做的一个小程序,我将它上传到了网上。于是有一个学生来找我学习,但我的C#造诣仅仅只是一本《C#与.NET4高级程序设计》,然后有一天他们的老师布置给他们一个关于C#模板的作业的时候,我对一直以来的机械式函数使用产生了疑惑。
在某一段时间我曾使用CSharp语言进行开发,在.net2.0之后CSharp支持模板,也挺喜欢它的模板的使用方式,比如where关键字。我怀疑过基于OO的C#既然有一个object基类为什么还需要模板,我的入门书老师在引入模板章节的时候告诉我,是因为装箱和拆箱的操作太耗。
我更偏向于把自己定位成一个C++程序员,为了理解C++中模板的意义。在从业一年多之后又翻出曾经的C++primer,学习STL。
然而在翻了一点C++Primer之后发觉单纯只是为了STL而再翻似乎有些麻烦。
于是一阵google之后找到了侯捷君的一本译作《C++标准程序库》。
但我并没有经历过没有模板的年代,所以也不清楚为什么会有人想到要创造模板这个东西,如果只是单纯地为了在编译前进行替换,不是可以使用宏吗?如果想要比宏安全,可模板也不见得安全多少,比如一个比较函数,C++的模板无法检测比较的两个类型是否有实现了<。而且被称为C++之父的BS先生还一再地声明不应该为模板设计限制,既然如此不是也只能在运行时出错了吗?
如果必须限制这个比较函数的参数类型必须实现了<运算,直接使用类的继承思想,使用实现了ICompare借口的类不是挺好吗?
C++中的模板似乎更像是一个宏。
比如在设计一个模板类的时候,还需要将函数直接内联在头文件中。因为编译之后的代码已经是被特例化之后的了。
诸此种种的疑问,除了使用容器的情况外,我几乎没有使用过模板。
所以,模板的诞生原因是什么?在什么样的情况下才算是正确地使用模板,我非常好奇。带着这样的好奇,我开始学习起C++的标准模板库。

 

目录
相关文章
|
8月前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
55 2
|
3月前
|
算法 编译器 C语言
STL基础介绍
STL基础介绍
55 0
|
7月前
|
存储 算法 C语言
STL标准模板库《实战案例汇总》
STL标准模板库《实战案例汇总》
73 1
|
6月前
|
存储 算法 数据处理
|
存储 算法 编译器
C++:STL第一篇vector
C++:STL第一篇vector
|
存储 算法 编译器
【C++STL】“vector“用法 入门必备 超详细
【C++STL】“vector“用法 入门必备 超详细
|
存储 算法 Linux
【C++初阶】七、STL---vector介绍及使用
目录 一、vector的介绍 二、vector的使用 2.1 Construct 2.2 operator= 2.3 Iterators 2.4 Capacity 2.5 Element access 2.6 Modifiers
160 0
【C++初阶】七、STL---vector介绍及使用
|
存储 算法 测试技术
【C++ STL】vector基础知识
本篇将学习vector的基础知识
98 0
|
存储 缓存 C++
【C++ STL】 list 基础知识
本篇将学习 list 的基础知识
124 0
|
存储 算法 安全
初识STL&STL简介
初识STL&STL简介
134 0