C++ STL容器之vector的知识点及源码分析

本文详细介绍了C++ STL中的vector容器,包括构造和析构函数、操作、数据结构以及push_back、pop_back、erase、clear、insert等核心操作的实现原理。通过对源码的分析,深入理解vector如何动态扩展内存以及管理元素。
摘要由CSDN通过智能技术生成

vector的数据安排和array非常相似,array是静态空间,一旦配置就不能改变,如果要改变的话,首先要配置新的空间,把元素移过去,释放原来的空间。而vector模塑出个一dynamic array,随着元素加入,它的内部机制自行扩充空间(一旦vector的空间满载,内部机制会做出配置新空间、激动数据、释放旧空间的行为)。

1.vector的构造和析构函数 

vector<Elem>  c                                  //Default构造函数,产生空vector,没有元素

vector<Elem>  c(c2)   or  c=c2          //Copy构造函数,建立一个和c2同类型的vector,拷贝c2

vector<Elem>  c(n)                             //利用Default构造函数,生成大小为n的vector

vector<Elem>  c(n,elem)                   //生成大小为n的vector,每个元素值为elem

vector<Elem>  c(beg,end)                //建立一个vector,以[beg,end)作为元素值

vector<Elem>  c(initlist)  or c=initlist //建立一个vector,以初值列如{0 , 0,0,0}为初值

c.~vector()                                           //销毁所有元素,释放内存

2.vector的操作

c.empty()                                  c.begin()                                        c.push_back()
c.size()                                      c.end()                                            c.pop_back()
c.max_size()                            c.cbegin()                                       c.insert(pos,elem) //在pos之前插入元素,返回新元素的位置
c.capacity()                              c.cend()                                           c.insert(pos,n,elem) //插入n个元素,返回第一个新元素位置
c.reserve()                               c.rbegin()                                         c.insert(pos,beg,end)
c.shrink_to_fit()                        c.rend()                                            c.insert(pos,initlist)
==    !=   <     <=    >   >=          c.crbegin()                                        c.erase(pos)
c1.swap(c2)                              c.crend()                                          c.erase(beg,end)
c[下标]                                                                                                 c.clear()
c.at(下标)
c.front()     c.back() 

注:间接缩减vector容量的小窍门,使用swap交换两个vector内容,两者的容量也会互换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值