STL学习1:vector

本文详细介绍了STL中的vector容器,它作为线性容器,结合了数组的高效随机访问和动态数组的自动扩展能力。讨论了vector的内存管理和效率,如按指数边界增长内存、reserve函数的作用,以及size和capacity的区别。此外,还概述了vector的插入操作接口,包括push_back和不同形式的insert函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector

STL封装了许多复杂的数据结构算法和大量常用的数据结构操作。vector封装数组,list封装链表,map和set封装二叉树(红黑树)

vector是线性容器,它的元素严格按照线性序列排列,和动态数组很相似。和数组类似的是,它的元素存储在一块连续的存储空间中,这也意味着不仅可使用迭代器(iterator)访问元素,还可以使用指针的偏移方式访问。和常规数组不一样的是,vector能够自动存储元素,可以自动增长或缩小存储空间。
STL中vector和list的区别

1 vector的内存管理和效率

vector容器支持支持随机访问,因此为了提高效率,它内部是使用动态数组的方式实现的。在通过reserve()函数来申请特定大小的内存空间时候总是按指数边界来增大其颞部缓冲区。当进行insert或push_back等增加元素的操作时,如果此时动态数组的内存不够用,就要动态的重新分配当前大小的1.5~2倍的新内存区,再把原数组的内容复制过去。
reserve成员函数允许开发者最小化必须进行的重新分配的次数,因而可以避免真分配的开销和迭代器、指针、引用失效。
注:
(1)size()可以获得容器中有多少元素,但不能获得容器为它容纳的元素分配的内存大小。
(2) capacity()可以获得容器在它已经分配的内存中可以容纳多少元素。那是容器在那块内存中总共可以容纳多少元素,而不是还可以容纳多少元素。如果想知道一个vector或string中有多少没有被占用的内存,则必须从capacity()中减去size()。如果size()和capacity返回同样的值,容器中就没有剩余空间了,而下一次插入(通过insert或者push_back等)会引发上面的重新分配步骤。

2 vector接口


接口:void push_back (const value_type& val);
功能:Add element at the end (public member function)

// vector::push_back
#include <iostream>
#include <vector>

int main ()
{
   
  std::vector<int> myvector
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值