vector代表了c++的动态数组,大小是动态可增长的。你不必考虑自己手动分配或释放内存,也不必担心内存泄漏,vector帮你做了这一切。vector的使用很简单,但是要做到有效率,没那么容易,了解他背后的实现原理能帮助达到这一目的。
如有不妥的地方,还请大家给出批评建议。
让我们先看看类的声明和数据成员:
#include <alloc.h> //内存分配器头文件,非标准
#include <iterator.h> //迭代器头文件,非标准
template <class T > //模板类声明,提供泛型功能。
class vector {
typedef alloc Alloc; //内存分配器typedef
public:
typedef T value_type; //值类型 T
typedef value_type* pointer; // 指针类型 T*
typedef value_type* iterator; //迭代器,这里的迭代器不需要封装,只是一个原生指针的typedef
typedef const value_type* const_iterator; // 只读迭代器
typedef value_type& reference; //引用 T&
typedef const value_type& const_reference; //只读引用
typedef size_t size_type; //长度类型 size_t,一般是unsigned int;
typedef ptrdiff_t difference_type; // 指针间隔,用来表示两个指针间的距离
typedef reverse_iterator<const_iterator, value_type, const_reference,
difference_type> const_reverse_iterator; //反向迭代器,定义在<iterator.h>
typedef reverse_iterator<iterator, value_type, reference, difference_type>
reverse_iterator; //只读反向迭代器
protected:
//数据成员
typedef simple_alloc<value_type, Alloc> data_allocator; //分配器的typedef
iterator start; //vector的第一个元素的迭代器,用来表示vector,永远为vector.begin();
iterator finish; //vector的末尾,指向vector的最后一个元素的下一个位置。永远为vector.end();
iterator end_of_storage; //vector所拥有的内存的末尾。如果等于vector.end(),表示vector已满
}
从以上我们可以看到,vector用allocator来进行内存管理,用三个迭代器来引用这段内存。vector的iterator 其实就是T*的别名。我们知道在一个连续的内存里(数组),指针是可以做算术运算的,也支持[]操作,所以vector的iterator也支持算术运算,++,--,+=, -=,[],vector的迭代器就是通常的随机访问迭代器了。
另外,我想说的是,STL有许多流行的版本,每一个版本实现都不是相同的,但是原理区别不大。vector的底层实现一般是连续的内存(数组)。deque的实现是连续的内存块,list的是双链表,set和map是红黑树。stack和queue都是这些容器的适配器(用这些容器来实现)。知道这些是很有必要的。
分享到:
相关推荐
C++中的Vector容器 C++中的Vector容器是一种动态数组,提供了一种灵活的方式来存储和管理数据。Vector容器是C++标准库中的一个重要组件,它提供了一种高效的方式来存储和访问数据。 Vector容器的使用方法有两种,...
然而,对于学习和理解C++内存管理和容器实现原理,尝试自己编写一个类似`std::vector`的数据结构是很有价值的。在这个自己实现的`vector`中,我们将探讨其核心功能以及优化的动态内存管理。 1. **基本结构**:一个...
VectorCAST License 安装手册 VectorCAST License 安装手册是 VectorCAST 软件的 License 管理工具安装指南,旨在帮助用户正确地安装和配置 VectorCAST License。下面是该手册中涉及到的知识点: 基本信息 * 软件...
C++ vector学习,自己的学习心得
MATLAB 中的 Vector MATLAB 作为一款功能强大的数学软件,Vector 是其核心概念之一。...我们还学习了如何使用 `linspace` 和 `round` 函数生成等距条目,并强制 n 的值。这些知识点对于 MATLAB 的使用和应用非常重要。
《深入理解C++标准库中的`vector`容器》 在C++标准库中,`std::vector`是一个非常重要的容器,它提供了动态数组的功能。在本文中,我们将深入解析一个自定义实现的`vector`类模板,以帮助我们更好地理解和应用`std:...
在C++编程中,`std::vector`是一个非常重要的容器,它是STL(标准模板库)的一部分,由MFC(Microsoft Foundation Classes)框架所支持。`std::vector`是一个动态数组,可以方便地进行元素的添加、删除和访问。在这...
在C++编程语言中,`std::vector`是标准模板库(STL)中的一种容器,它提供...在`studyworkspace`这个文件夹中,可能包含了关于`vector`实现的代码示例和练习,通过学习和实践这些内容,你将更深入地掌握`vector`的使用。
这是一个关于学习vector的PPT,里面包含了关于vector的各类知识点,同时还可以到本人博客(寒假培训——vector)中查询关于vector的例题链接同时配有题解。
《Vector Cast使用手册》 在软件开发过程中,测试是确保产品质量的重要环节。单元测试和集成测试作为两种关键的测试方法,对于发现代码中的错误和缺陷至关重要。Vector Cast是一款强大的自动化测试工具,它提供了...
Vector产品手册电子版 Vector产品手册电子版是Vector公司发布的一份产品手册,详细介绍了Vector公司的概况、产品及服务等信息。Vector公司是一家德国的汽车工业软件公司,成立于1988年,总部位于德国斯图加特。 ...
Vector Cast Train资料是针对如何使用Vector Cast进行单元测试的一套学习资源。这套资料可能包括详细的教程、示例项目、用户指南和最佳实践等内容,帮助开发者深入理解和掌握Vector Cast的使用。以下是对Vector Cast...
1. VectorCAST工具介绍: - VectorCAST是一个嵌入式软件测试产品。 - 由Vector软件公司开发,这是一家位于美国的公司,成立于1990年,由嵌入式开发人员创立。 - VectorCAST的第一个产品是在1994年为洛克希德马丁...
在C++中,`std::vector`是一种非常重要的容器,它提供了一种动态数组的概念,允许我们在运行时灵活地管理内存。然而,在某些只支持C语言的环境中,我们无法直接使用C++的`std::vector`。为了在这些场景下也能实现...
通过这个"Labview Vector CAN"示例,用户不仅可以学习到如何在Labview环境中配置和控制Vector硬件,还能深入理解CAN和LIN通信协议的实现细节。对于开发和测试涉及CAN或LIN的嵌入式系统来说,这是一个非常有价值的...
通过深入理解这个驱动的源代码,我们可以学习到如何与硬件接口交互,如何处理XCP报文,以及如何集成到VECTOR的标定环境中。 总的来说,"XCP Basic Driver.rar"提供的资源对于理解XCP协议和在VECTOR平台上进行标定...
在C++标准库中,`std::vector`是一种动态数组,它允许我们在程序运行时方便地添加或删除元素。然而,在纯C语言环境下,我们没有内置的类似数据结构。为了在C语言中实现类似STL(Standard Template Library)的`...
在C++标准库中,`std::vector`和`std::map`是两种非常重要的容器。它们被设计用于存储和管理数据,各自有着独特的特性和用途。...在学习过程中,不断实践和优化,将使你在编程之路上更加得心应手。
用户手册的其他部分可能还包括了关于Vector SLP4的使用历史、快速查找信息的方法、约定、认证、保修、支持、商标、勘误表、硬件制造商的示例代码以及手册学习目标等信息。这些内容有助于读者更好地理解和使用手册...
C++中的`std::vector`是一个非常重要的标准模板库(STL)容器,它提供了一种动态数组的功能。在C++编程中,`vector`经常用于处理动态大小的序列数据,其内部存储空间是连续的,这使得随机访问元素非常高效。下面我们将...