现在位置: 首页 > C++ 教程 > 正文

C++ <vector> resize 函数

C++ 容器类 <vector> C++ 容器类 <vector>


resize 是 vector 中用于调整大小的函数,可以改变容器中元素的数量。

resize 是容器类的成员函数,用于将容器的大小调整为指定的元素个数。如果新大小大于当前大小,会添加新元素;如果小于当前大小,会删除多余的元素。

resize 提供了灵活调整容器大小的能力,是 vector 强大的动态特性之一。

单词释义resize 表示"调整大小",即改变容器中元素的数量。


基本语法与参数

resize 是容器类的成员函数,可以指定新的元素个数。

语法格式

void resize(size_type count);
void resize(size_type count, const T& value);

参数说明

参数count

  • 类型: size_type(无符号整数类型,通常是 size_t
  • 描述: 容器新的元素个数。

参数(可选): value

  • 类型: 与容器元素类型相同
  • 描述: 当需要添加元素时,用于填充新元素的默认值。如果不指定,默认使用值初始化(对于内置类型为 0)。

函数说明

  • 返回值void(无返回值)。
  • 效果: 将容器的 size() 调整为 count。如果需要添加元素,使用 value 填充;如果需要删除元素,丢弃多余的元素。
  • 注意resize 会改变容器的 size(),也可能改变 capacity()

实例

让我们通过一系列例子,彻底掌握 resize 的用法。

示例 1:基础用法 - 扩大容器

实例

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3};

    std::cout << "初始状态 - size: " << numbers.size()
              << ", capacity: " << numbers.capacity() << std::endl;
    std::cout << "元素: ";
    for(int n : numbers) std::cout << n << " ";
    std::cout << std::endl;

    // 扩大容器到 10 个元素
    numbers.resize(10);

    std::cout << "\nresize(10) 后 - size: " << numbers.size()
              << ", capacity: " << numbers.capacity() << std::endl;
    std::cout << "元素: ";
    for(int n : numbers) std::cout << n << " ";
    std::cout << std::endl;

    return 0;
}

运行结果预期:

初始状态 - size: 3, capacity: 3
元素: 1 2 3

resize(10) 后 - size: 10, capacity: 10
元素: 1 2 3 0 0 0 0 0 0 0

代码解析:

  1. 初始有 3 个元素:1, 2, 3。
  2. resize(10) 将大小调整为 10。
  3. 新增的 7 个元素被值初始化为 0。

示例 2:使用指定值填充新元素

可以在 resize 时指定填充值。

实例

#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> names = {"Alice", "Bob"};

    std::cout << "初始状态 - size: " << names.size() << std::endl;
    std::cout << "元素: ";
    for(const auto& n : names) std::cout << n << " ";
    std::cout << std::endl;

    // 使用 "Unknown" 填充新元素
    names.resize(5, "Unknown");

    std::cout << "\nresize(5, \"Unknown\") 后 - size: " << names.size() << std::endl;
    std::cout << "元素: ";
    for(const auto& n : names) std::cout << n << " ";
    std::cout << std::endl;

    return 0;
}

运行结果预期:

初始状态 - size: 2
元素: Alice Bob

resize(5, "Unknown") 后 - size: 5
元素: Alice Bob Unknown Unknown Unknown

代码解析:

  • 使用 resize(5, "Unknown") 将大小调整为 5。
  • 新增的 3 个元素都被填充为 "Unknown"。

示例 3:使用 resize 缩小容器

resize 也可以用来缩小容器。

实例

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    std::cout << "初始状态 - size: " << numbers.size() << std::endl;
    std::cout << "元素: ";
    for(int n : numbers) std::cout << n << " ";
    std::cout << std::endl;

    // 缩小到 5 个元素
    numbers.resize(5);

    std::cout << "\nresize(5) 后 - size: " << numbers.size() << std::endl;
    std::cout << "元素: ";
    for(int n : numbers) std::cout << n << " ";
    std::cout << std::endl;

    return 0;
}

运行结果预期:

初始状态 - size: 10
元素: 1 2 3 4 5 6 7 8 9 10

resize(5) 后 - size: 5
元素: 1 2 3 4 5

代码解析:

  • resize(5) 将大小调整为 5。
  • 末尾的 5 个元素被删除。

示例 4:resize 与 capacity

resize 会同时改变 sizecapacity

实例

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v;

    // 预先分配空间
    v.reserve(100);
    v.push_back(1);
    v.push_back(2);

    std::cout << "初始 - size: " << v.size() << ", capacity: " << v.capacity() << std::endl;

    // resize 到更大的值
    v.resize(50);
    std::cout << "resize(50) 后 - size: " << v.size() << ", capacity: " << v.capacity() << std::endl;

    // resize 到更小的值
    v.resize(10);
    std::cout << "resize(10) 后 - size: " << v.size() << ", capacity: " << v.capacity() << std::endl;

    return 0;
}

运行结果预期:

初始 - size: 2, capacity: 100
resize(50) 后 - size: 50, capacity: 100
resize(10) 后 - size: 10, capacity: 100

代码解析:

  • resize 的值小于当前容量时,capacity 保持不变。
  • resize 的值大于当前容量时,capacity 会相应增加。

示例 5:使用 resize 创建固定大小的容器

resize 可以用于创建固定大小的容器。

实例

#include <iostream>
#include <vector>

int main() {
    // 创建一个包含 100 个 -1 的 vector
    std::vector<int> scores(100, -1);

    std::cout << "大小: " << scores.size() << std::endl;
    std::cout << "前 10 个元素: ";
    for(int i = 0; i < 10; ++i) {
        std::cout << scores[i] << " ";
    }
    std::cout << std::endl;

    // 设置某个位置的值
    scores[0] = 100;
    scores[1] = 95;

    std::cout << "修改后前 10 个元素: ";
    for(int i = 0; i < 10; ++i) {
        std::cout << scores[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

代码解析:

  • 使用 resize 可以创建包含固定数量元素的容器。
  • 这在需要预分配固定大小容器时很有用。

C++ 容器类 <vector> C++ 容器类 <vector>