c++vector替换元素_C++ 学习笔记之——STL 库 vector

C++中的vector是一种动态数组,提供随机访问并自动管理内存。它在末尾插入元素效率高,但中间插入删除效率较低。vector支持构造函数、赋值运算、迭代器、容量管理、元素访问及多种修改操作。动态内存分配在大小对数增长时发生,以保持常数时间复杂度的末尾插入。
摘要由CSDN通过智能技术生成

711408b83f61209cbb827cf7c088f322.png

vector 是一种顺序容器,可以看作是可以改变大小的数组。

就像数组一样,vector 占用连续的内存地址来存储元素,因此可以像数组一样用偏移量来随机访问,但是它的大小可以动态改变,容器会自动处理内存分配问题。

在内部,vector 使用动态分配的数组来存储元素,当新元素插入时,如果现有的存储空间已经占满,则需要重新再分配一个新的数组,并且将之前的元素都移动到新的内存上。这个过程是非常耗时的,因此,vector 并不会在每次插入新元素时都重新分配内存。

相反,vector 容器可能会分配一些额外的内存来适应其大小的增长,因此,其真实容量可能比存储这些元素实际需要的内存要大。库通过不同的策略来平衡内存占用和空间再分配,但无论如何,空间分配只应在 vector 大小以对数增长的时候发生,以便在向量末尾插入单个元素可以做到均摊情况下是常数级的时间复杂度

因此,相对于数组,vector 会消耗更多的内存来换取更有效地对内存进行管理并且动态增长。

相对于其他动态容器,vector 支持随机访问,并且能相对高效地在末尾插入或者删除元素,但如果要在其他位置插入或者删除元素,vector 就会表现得很差,而且迭代器和引用也不是那么方便。

构造函数

  • explicit vector (const allocator_type& alloc = allocator_type());默认构造函数,构造出一个不包含任何元素的空的 vector;
  • explicit vector (size_type n);构造出一个包含
    个元素的 vector,默认会初始化为 0;
  • explicit vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());构造出一个包含
    个值为
    的 vector;
  • vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());构造出一个包含迭代器
    范围内元素的 vector,注意左闭右开;
  • vector (const vector& x);复制构造函数,构造出一个和
    相同的 vector;
#include <iostream>
#include <vector>

using namespace std;

int main ()
{
    
    vector<int> first;                                 // 空的 vector
    vector<int> second (4, 100);                       // 包含 4 个值为 100 元素的 vector,[100, 100, 100, 100]
    vector<int> third (second.begin(), second.end()); // 包含 second 起始迭代器到终止迭代器区间元素的 vector,[100, 100, 100, 100]
    vector<int> fourth (third);                       // 对 third 的复制,[100, 100, 100, 100]

    // 数组也可以用来作为迭代器初始化 vector
    int myints[] = {
    16, 2, 77, 29};
    vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); //[16, 2, 77, 29]
    vector<int> sixth (4); // [0, 0, 0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值