C++ <vector> resize 函数
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;
}
#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
代码解析:
- 初始有 3 个元素:1, 2, 3。
resize(10)将大小调整为 10。- 新增的 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;
}
#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;
}
#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 会同时改变 size 和 capacity。
实例
#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;
}
#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;
}
#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>