您的位置:

深入浅出vector::resize()

一、vector::resize()简介

vector::resize()函数是C++ STL中vector容器中的一个非常常用的函数之一,它可以改变vector的大小,使其可以存储更多或更少的元素。

下面我们会从以下几个方面对vector::resize()函数做详细的阐述。

二、vector::resize()函数参数介绍

vector::resize()函数有两个参数,其中第一个参数为要改变的vector的大小,第二个参数为一个可选的默认值,如果指定了第二个参数,则在向vector中添加元素时,会将这个默认值插入到新分配的空间中,如果没有指定,则默认使用元素类型的默认构造函数,其中第一参数是必须的,第二个参数是可选的。

void resize(size_type count, T value = {});

三、vector::resize()函数用法

1、在vector中添加元素

使用vector::resize()函数可以在向vector中添加元素时实现自动扩容的功能,如下所示:

//代码示例一
#include 
   
#include 
    

int main() {
    std::vector
      nums;
    nums.resize(10); // 将向量的大小改为10
    std::cout << "nums size is: " << nums.size() << std::endl; // 输出10
    nums[9] = 100; // 向向量的最后一个元素中插入值100
    for (int i : nums)
        std::cout << i << '\n'; // 输出0 0 0 0 0 0 0 0 0 100
    return 0;
}

     
    
   

上述代码中,vector对象nums扩容至10个元素,并插入了一个值为100的元素。

vector::resize()函数还可以在向vector中加入元素时缩小vector的容量,如下所示:

//代码示例二
#include 
   
#include 
    

int main() {
    std::vector
      nums{1, 2, 3, 4, 5};
    nums.resize(3);
    std::cout << "nums size is: " << nums.size() << std::endl; // 输出3
    for (int i : nums)
        std::cout << i << '\n'; // 输出1 2 3
    return 0;
}

     
    
   

上述代码中,vector对象nums扩容至3个元素,会将nums中含有4和5的元素删除,只保留前三个元素。

2、在vector中添加默认值

在使用vector::resize()函数时,可以使用第二个函数参数为vector中新增的元素指定默认值,如下所示:

//代码示例三
#include 
   
#include 
    

int main() {
    std::vector
      nums;
    nums.resize(10, 5); // 将vector扩容至10并填充5
    for (int i : nums)
        std::cout << i << '\n'; // 输出5 5 5 5 5 5 5 5 5 5
    return 0;
}

     
    
   

上述代码中,nums.resize(10, 5)将向量的大小改为10,并用数字5填充了前10个元素。

四、vector::resize()函数的局限性

使用vector::resize()函数时需要注意以下几个问题:

1、vector::resize()函数会破坏向量中原有元素之间的相对关系,因此对于需要保持相相对关系的向量,不建议使用该函数。

2、对于使用vector::resize()函数扩容的vector,其中新增加的元素会使用默认构造函数进行初始化,这可能不是程序员想要的行为。

3、对于使用vector::resize()函数减小vector容量的情况,其中被删除的元素也会调用其析构函数,这可能会对性能产生不良影响。

五、总结

本文从vector::resize()函数的参数和用法等多个方面进行了详细的介绍,使读者更好地理解这个函数的作用和使用方法。但同时本文也提到了该函数的三个局限性,因此在具体使用该函数时,需要根据具体情况权衡利弊。