【C++】STL——vector的有关空间的函数介绍和使用、size和capacity函数、resize和reserve函数

本文详细介绍了C++标准库中的vector容器,包括size()函数获取元素个数,capacity()获取容量大小,empty()判断容器是否为空,resize()改变vector的大小以及reserve()预先分配空间以优化性能。还讨论了不同编译器下vector增长策略的差异,并强调了resize和reserve的区别。

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

1.vector的使用

  vector和含义、vector构造函数、vector迭代器

  vector完整介绍

2.vector空间增长问题

在这里插入图片描述

(1)size 获取数据个数

  size()函数用于返回容器中元素的个数。

  下面是一个使用std::vector的size()函数的例子:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers; // 创建一个int类型的vector容器

    numbers.push_back(10); // 向容器中添加元素
    numbers.push_back(20);
    numbers.push_back(30);
    numbers.push_back(40);

    std::cout << "容器中元素的个数为:" << numbers.size() << std::endl;

    return 0;
}

//容器中元素的个数为:4

(2)capacity 获取容量大小

  vector容器的capacity()函数用于返回当前容器的容量,即底层数组能够容纳的最大元素数量。

  下面是一个使用std::vector的capacity()函数的例子:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers; // 创建一个int类型的vector容器

    std::cout << "初始容器的容量为:" << numbers.capacity() << std::endl;

    numbers.push_back(10); // 向容器中添加元素
    numbers.push_back(20);
    numbers.push_back(30);
    numbers.push_back(40);

    std::cout << "添加四个元素后的容器的容量为:" << numbers.capacity() << std::endl;

    return 0;
}

//初始容器的容量为:0
//添加四个元素后的容器的容量为:4

  size()和capacity()有不同的地方:

  size()函数用于返回容器中当前存储的元素数量,即容器中的实际元素个数。

  capacity()函数用于返回容器底层实际分配的存储空间大小,即容器能够容纳的最大元素数量。
  

(3)empty 判断是否为空

  empty()函数用于检查vector容器是否为空,即是否没有任何元素。它返回一个布尔值,true表示容器为空,false表示容器非空。

  下面是一个使用empty()函数的例子:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers; // 创建一个int类型的vector容器

    if (numbers.empty()) {
        std::cout << "容器为空" << std::endl;
    } else {
        std::cout << "容器非空" << std::endl;
    }

    numbers.push_back(10); // 向容器中添加元素

    if (numbers.empty()) {
        std::cout << "容器为空" << std::endl;
    } else {
        std::cout << "容器非空" << std::endl;
    }

    return 0;
}

//容器为空
//容器非空

(4)resize 改变vector的size

  resize()函数用于更改vector容器的大小,以容纳指定数量的元素。 当新的大小大于当前大小时,额外的元素将被默认构造或复制构造。当新的大小小于当前大小时,超出新大小的元素将会被删除。

  下面是一个使用resize()函数的例子:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers; // 创建一个int类型的vector容器

    numbers.push_back(10); // 向容器中添加元素
    numbers.push_back(20);
    numbers.push_back(30);
    numbers.push_back(40);

    std::cout << "容器中元素的个数为:" << numbers.size() << std::endl;

	numbers.resize(10);

	std::cout << "resize后的容器中可放元素个数为:" << numbers.size() << std::endl;

    return 0;
}

//容器中元素的个数为:4
//resize后的容器中可放元素个数为:10

(5)reserve 改变vector的capacity

  reserve()函数用于为容器预留一定的存储空间,以便在之后添加元素时减少重新分配内存的次数。 它接受一个参数,即预留空间的大小。注意,预留的空间大小并不会直接改变vector的size。

  使用reserve()函数的目的是优化性能,当我们预知容器可能需要存储大量元素时,可以使用reserve()函数提前分配足够的内存空间,避免频繁的内存重新分配和数据复制。

  下面是一个简单的例子,用于说明reserve()函数的含义和概念:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers; // 创建一个int类型的vector容器

    std::cout << "初始容器的容量为:" << numbers.capacity() << std::endl;

    numbers.push_back(10); // 向容器中添加元素
    numbers.push_back(20);
    numbers.push_back(30);
    numbers.push_back(40);

    std::cout << "添加四个元素后的容器的容量为:" << numbers.capacity() << std::endl;

    numbers.reserve(10);

    std::cout << "reserve后容器的容量为:" << numbers.capacity() << std::endl;

    return 0;
}

//初始容器的容量为:0
//添加四个元素后的容器的容量为:4
//reserve后容器的容量为:10

注意:
  capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。 这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。

总结:

  resize在开空间的同时还会进行初始化,影响size。

  reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鳄鱼麻薯球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值