STL
-
如何避免vector容器进行不必要的扩容?
前面提到,我们可以将 vector 容器看做是一个动态数组。换句话说,在不超出 vector 最大容量限制(max_size() 成员方法的返回值)的前提下,该类型容器可以自行扩充…
-
C++ vector(STL vector)底层实现机制(通俗易懂)
STL 众多容器中,vector 是最常用的容器之一,其底层所采用的数据结构非常简单,就只是一段连续的线性内存空间。 通过分析 vector 容器的源代码不难发现,它就是使用 3 …
-
C++ STL array容器和普通数组的比较
和 C++ 普通数组存储数据的方式一样,C++ 标准库保证使用 array 容器存储的所有元素一定会位于连续且相邻的内存中,通过如下代码也可以验证这一点: #include <…
-
算法复杂度的衡量标准:大O表示法
学习 C++ 标准库,特别是 STL,经常需要考量算法和成员函数的效能(也就是运行效率,又称复杂度),因此每个学习 STL 的读者都需要掌握一种衡量算法(或成员函数)复杂度的方法,…
-
泛型是什么,C++泛型编程又是什么?
在计算机程序设计领域,为了避免因数据类型的不同,而被迫重复编写大量相同业务逻辑的代码,人们发展的泛型及泛型编程技术。 那么,什么是泛型呢?本节就带领读者深度剖析一下这个问题。 所以…
-
C++为什么要引入STL?
C++ 标准程序库发展至今,几乎所有内容都被设计为了模板的形式,STL 已经成为 C++ 程序库的重要组成部分。可以这么说,如果 C++ 不支持 STL 标准模板库,就无法使用程序…
-
C++ string类库简介
字符串的表现形式多种多样,如 TCHAR,std::string、BSTR 等。字符串类均起源于 C 语言的字符串,而最初 C 语言的字符串是字符的数组。单字节字符串顺序存放各个字…
-
抽象数据类型(ADT)是什么?
抽象数据类型(Abstract Data Type,ADT)是将数据对象、数据对象之间的关系和数据对象的基本操作封装在一起的一种表达方式,它和工程中的应用是一致的。 在工程项目中,…
-
C++自定义迭代器(STL自定义迭代器)的实现详解
迭代器对于任何自定义的类序列都是一个强大的附加工具。它允许我们将算法运用到有自定义类元素的容器上。可能会出现一种情形,没有可以满足我们需要的标准 STL 容器,这时候就需要定义一个…
-
C++ vector迭代器及用法
正如期望的那样,vector 容器实现了所有可以返回迭代器的成员函数,包括 const 迭代器和 non-const 迭代器,以及反向迭代器。 vector 容器的迭代器是随机访问…