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

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增容的代价缺陷问题。

猜你喜欢

转载自blog.csdn.net/Crocodile1006/article/details/131772568
今日推荐