C++中什么是容器?可不可以具体解释一下

来源:百度知道 编辑:UC知道 时间:2024/05/29 12:46:33
比如string::size_type 是什么啊?

详细解释一下“netkinghancong”所说的“容器就是用来装东西的”:
比如说碗可以作为水的容器,油桶可以作为油的容器。同样,map<class A> 可以作为 class A 对象的容器。

为了方便,C++ 中 stl 自带一些容器,map、set、vector、list、queue 等是根据不同的数据结构来制定的容器。由于不能指定容器中结点的类型(如 class A),所以采用模板的形式实现的。

如果你没学过 typedef ,去看看,下面的话当作你了解 typedef ,可以当做 string 中的代码:
typedef size_t size_type;
模板中采用这种方式对一些类型进行再定义,目的是可以很方便地更改这些类型,或者在有必要的时候将该类型作为模板参数,是提高代码“可维护性”的表现。

C++ 中的模板:
为了让 C++ 具有“泛型编程”的能力而引进,主要为了编写“适合各种类型”的代码。如 vector 并不是一个 class (类型),vector<int>、vector<double>、vector<class A> 等才是(当然,三者并不是同一类型)。

认识模板,到应用模板,到编写模板,是一个较为长远的思维路程。这比从“面向过程”到“面向对象”绝对有过之而无不及。一般 C++ 面向对象有了很好的了解之后,可以开始对泛型编程的试探。而在此之前会用就可以了。

模板刚开始出现在 C++ 中时,只被当作是“代码生成器”;而发展到现在,模板经常被当作“编译期运算”的工具,即牺牲编译期的时间,提高代码在执行期的效率。

如果想深入研究的话,推荐本人认为最经典的《Modern C++ Design》(《C++ 设计新思维》,简称 MCD)。建议对自己 C++ 功底持怀疑态度的人不要读该书。一个对 C++ 功底有自信的人读该书一般有四种情况:
A、完全看不懂,或者在前两章就被它“撂倒”。这种人奉其为“天书”。
B、能看懂一半。看了此书,知道了自己 C++ 水平有多烂,而后随着读该书,C++ 水平飞速提升。