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++的标准模板库。

 

目录
相关文章
|
3月前
|
存储 算法 C++
【C++】STL的基本用法
【C++】STL的基本用法
40 0
|
27天前
|
存储 C++ 索引
C++的STL学习笔记
C++的STL学习笔记
55 0
|
4月前
|
存储 算法 C++
【C++入门到精通】C++入门 —— vector (STL)
`std::vector`是C++标准库中的一个容器类模板,是一种动态数组,可以存储相同类型的元素。它提供了动态调整大小、快速随机访问、插入和删除元素的操作。
36 1
|
9月前
|
存储 算法 编译器
【C++STL】“vector“用法 入门必备 超详细
【C++STL】“vector“用法 入门必备 超详细
|
12月前
|
存储 算法 测试技术
【C++ STL】vector基础知识
本篇将学习vector的基础知识
58 0
|
12月前
|
存储 缓存 C++
【C++ STL】 list 基础知识
本篇将学习 list 的基础知识
87 0
|
存储 算法 安全
初识STL&STL简介
初识STL&STL简介
91 0
|
C++
STL实战
STL实战
113 0
|
C++ 容器
【STL基本用法】
vector:动态数组(可变长数组,倍增的思想) size() 返回元素的个数(所有的SLT容器都有,O(1)) empty() 返回是否为空 (所有的SLT容器都有) clear() 清空 front()/back() 返回vector第一个/最后一个数 push_back()/pop_back() 在vector最后插入一个数/把最后一个元素删除 begin()/end() 迭代器,begin
105 0