C++ STL之 vector

12 篇文章 0 订阅

vector实现原理是数组,其元素在内存上是连续的。

学会vector的关键在于区别size()和capacity()。

其成员函数vector.size()表示vector中实际元素的数量。

vector的长度是不确定的,当往vector添加元素时,如果vector后的连续空间不足以插入元素,vector会重新申请一段更长的空间。

vector.capacity()表示在不需要重新分配内存的情况下,vector能容纳的最多元素个数。

若需重新分配空间,新的vector.capacity()会变为原值的2倍(经测试),以避免用户频繁插入元素导致vector需要频繁重新分配内存。

 void assign(const_iterator first,const_iterator last);
复制first-last至vector,此举会删除vector中原有的所有元素。

void assign(size_type n,const T& x = T());
将n个x置入vector,删除所有元素。

at(n)
同 vector[n],访问第n个元素,但会检查是否越界,并抛出异常

back()
返回最后一个元素。

begin()
返回第一个元素的迭代器,*begin()为第一个元素

capacity()
在不需要重新分配内存的情况下,vector能容纳的最多元素个数。

 cbegin()
返回const_iterator,只可访问第一个元素,不可修改

cend()
返回const_iterator,只可访问最后一个元素,不可修改

clear()
将size()置为0,capacity()不变。

crbegin()
rbegin()和cbegin()的结合。

crend()
cend()和rend()的结合。

data()
返回首元素指针(不是迭代器),这是vector是数组的最好说明。

emplace(iterator where, **args)
功能同insert(),但可以避免不必要的临时构造,args为构造参数。

emplace_back(**args)
功能同push_back(),参数为构造参数。

empty()
检查vector是否为空。

end()
返回最后一个元素下一个位置的迭代器,*end()越界

erase(it)     erase(begin, end)
删除it;删除begin-end(迭代器)之间的元素;返回最后一个已删除元素位置的迭代器;

front()
返回第一个元素

get_allocator()
返回一个allocator,内存分配器,类似malloc函数对象。

insert(where, value) 
重载比较多,没啥好说的

max_size()
在主机上,有可能的,最大的size();可能未到这个值,就已经没法添加元素了。

= 和 [ ]
[ ] 参考数组。

pop_back()
删除最后一个元素,无返回值。

push_back(n)
功能同emplace_back,将n放到vector末尾

rbegin()
返回一个reverse_iterator,此迭代器减小时,所指元素位置往后+1。

rend()
返回一个reverse_iterator,参考rbegin()。

reserve(n)
将capacity置为n,不改变size();例外:若n < size(),则capacity置为size()。(经测试)

resize(n)
将size()置为n,不改变capacity;例外:若 2*capacity > n > capacity(),capacity翻倍;
若n >= 2*capacity,capacity 置为 n。(经测试)

shrink_to_fit()

将capacity置为size。

size()
返回size

swap()
交换两个vector对象,实质上交换了vector.data()。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值