开新专栏啦,该系列是 极客时间-黄清昊-算法实战高手课 的学习笔记,以此为媒介深挖我们之前提到但没展开的内容。希望大家一起学习,一起进步。
回顾
我们在之前的内容,分享过vector作为顺序容器的一部分内容:
c++stl
我把之前的内容挪一部分来:
动态数组,用于 O(1) 的随机读取.
实现原理:
由三个指针实现,
第一个指针指向vector起始位置
第二个指针指向目前有数据的末尾
第三个指针指向整个vector容器所占内存的末尾。
由此实现:
template<class _Ty,
class _Ax>
class vector
: public _Vector_val<_Ty, _Ax>
{
// varying size array of values
public:
/********/
protected:
pointer _Myfirst; // pointer to beginning of array
pointer _Mylast; // pointer to current end of sequence
pointer _Myend; // pointer to end of array
};
由此:
注意:
end 指向第二个指针
size 是2-1 而capacity 是3-1(不懂的话举个例子,水杯里有半杯水,半杯水是其size,而一杯水是其capacity)
注意resize的时候,是新在堆中开辟内存,赋值之后删除旧数组
template <class _Ty, class _Alloc = allocator<_Ty>>
class vector{
public:
iterator begin() {
return _Myfirst;}
iterator end() {
return _Mylast;}
size_type size() const {
return size_type(end() - begin());}
size_type capacity() const {
return size_type(_Myend - begin());}
bool empty() const {