STL之vector【待完善】

向量(vector)是定义于名称空间std内的模板。是一种序列式容器

头文件:#include<vector>

template <class T, class Allocator=allocator<T>> class vector;

底层实现:数组。连续存储的容器,动态数组,在堆上分配内存空间。

内存增长为两倍容量增长:当插入新元素时,如果还有剩余空间,那么直接添加到最后(或者插入到指定位置),然后调整迭代器;如果没有剩余空间了,就分配原来空间的两倍,然后将原空间的数据复制到新空间,再向新空间添加元素,最后析构释放原有空间,之前的迭代器将失效。

性能:尾部插入或删除速度较快,时间复杂度O(1);而对于其他部位,则花费的时间比较长一些,主要是移动元素耗费时间,时间复杂度O(n)。

          vector在中间结点插入和删除会导致内存拷贝

          vector随机访问性能极好,插入删除性能较差;

适用场景:经常随机访问,且不经常对非尾结点进行插入或删除

以下贴出一些vector成员函数,主要看返回类型,参数,基本上会用就行

(1)push_back();   作用:插入一个元素到容器尾部

void push_back(const _Ty& _Val) {        //插入元素在末端, provide strong guarantee                                   emplace_back(_Val);   
 }    
void push_back(_Ty&& _Val) {         //通过移动到元素末尾插入, provide strong guarantee        emplace_back(_STD move(_Val));    
}

(2)pop_back();  作用:弹出最后一个元素

void pop_back() noexcept /* strengthened */ {
        auto& _My_data   = _Mypair._Myval2;
        pointer& _Mylast = _My_data._Mylast;

#if _ITERATOR_DEBUG_LEVEL == 2
        _STL_VERIFY(_My_data._Myfirst != _Mylast, "vector empty before pop");
        _Orphan_range(_Mylast - 1, _Mylast);
#endif // _ITERATOR_DEBUG_LEVEL == 2

        _Alty_traits::destroy(_Getal(), _Unfancy(_Mylast - 1));
        --_Mylast;
    }

(3)capacity();   作用:返回容器实际能容纳的元素容量

(4)assign();    作用:更新容器内容操作

at();    作用:像数组那样访问元素。如v1.at(1);  

front();   作用:返回第一个元素

back();   作用:返回最后一个元素

begin();   作用:迭代器相关函数,指向第一个元素

end();   作用:迭代器相关函数,指向最后一个元素的下一个元素

cbegin()   作用:返回值类型为const_iterator,功能同begin

cend();   作用:返回值类型为const_iterator,功能同end

rbegin();    作用:迭代器相关函数,指向逆向迭代的第一个元素,

rend();    作用:迭代器相关函数,指向逆向迭代的最后一个元素的下一个元素

clear();   作用: 清空容器中所有元素

reserve();

resize();

size();   作用:返回容器中现有数量

swap();

crbegin();   返回值类型为const_reverse_iterator,功能同crbegin

crend();   返回值类型为const_reverse_iterator,功能同crend

data();

emplace();

emplace_back();   作用:是减少对象拷贝和构造次数   C++11   主要适用于对临时对象的赋值。

empty();     作用:判断容器是否为空,为空,则函数返回真。

erase();    作用:删除指定元素

get_allocator();    作用:给容器分配空间

insert();    作用:插入元素到指定位置

max_size();    作用:返回最大容量

operator=    作用:可以将一个vector通过=符号赋给另一个vector

operator[]    作用:使vector可以像数组那样通过下标,实现随机访问

_Emplace_reallocate();

_Unchecked_begin();

~vector();

 

==============================================================================================

写不动了,明天再写

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值