C++ <vector> size 函数
size 是 vector 中最常用、最基础的函数之一,用于获取容器中元素的数量。
size 是容器类的成员函数,用于返回容器当前包含的元素个数。这个值代表了 vector 中实际存储的数据量。
size 是操作 vector 时最频繁使用的函数,用于循环遍历、边界检查、条件判断等场景。
单词释义: size 就是"大小",表示容器中元素的数量。
基本语法与参数
size 是容器类的成员函数,调用它不需要参数。
语法格式
size_type size() const;
参数说明
- 参数: 无参数
size不接受任何参数。
函数说明
- 返回值: 返回
size_type类型(通常是size_t),表示容器中当前元素的数量。 - 效果: 返回一个非负整数,表示容器中实际存储的元素个数。
- 注意:
size()返回的是元素个数,不是容量。可以使用capacity()获取容量。
实例
让我们通过一系列例子,彻底掌握 size 的用法。
示例 1:基础用法 - 获取元素数量
实例
#include <iostream>
#include <vector>
int main() {
// 1. 空 vector
std::vector<int> emptyVec;
std::cout << "空 vector 的大小: " << emptyVec.size() << std::endl;
// 2. 有元素的 vector
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "有元素 vector 的大小: " << numbers.size() << std::endl;
// 3. 使用 push_back 添加元素
std::vector<std::string> names;
names.push_back("Alice");
names.push_back("Bob");
names.push_back("Charlie");
std::cout << "添加 3 个元素后的大小: " << names.size() << std::endl;
return 0;
}
#include <vector>
int main() {
// 1. 空 vector
std::vector<int> emptyVec;
std::cout << "空 vector 的大小: " << emptyVec.size() << std::endl;
// 2. 有元素的 vector
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "有元素 vector 的大小: " << numbers.size() << std::endl;
// 3. 使用 push_back 添加元素
std::vector<std::string> names;
names.push_back("Alice");
names.push_back("Bob");
names.push_back("Charlie");
std::cout << "添加 3 个元素后的大小: " << names.size() << std::endl;
return 0;
}
运行结果预期:
空 vector 的大小: 0 有元素 vector 的大小: 5 添加 3 个元素后的大小: 3
代码解析:
- 空 vector 的
size()返回 0。 - 有 5 个元素的 vector 返回 5。
- 每次
push_back添加元素后,size()会增加 1。
示例 2:在循环中使用 size()
size() 最常用于控制循环遍历。
实例
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {10, 20, 30, 40, 50};
// 使用 size() 控制循环
std::cout << "遍历所有元素: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// 使用 size() 获取反向遍历的边界
std::cout << "反向遍历: ";
for(size_t i = numbers.size(); i > 0; --i) {
std::cout << numbers[i - 1] << " ";
}
std::cout << std::endl;
return 0;
}
#include <vector>
int main() {
std::vector<int> numbers = {10, 20, 30, 40, 50};
// 使用 size() 控制循环
std::cout << "遍历所有元素: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// 使用 size() 获取反向遍历的边界
std::cout << "反向遍历: ";
for(size_t i = numbers.size(); i > 0; --i) {
std::cout << numbers[i - 1] << " ";
}
std::cout << std::endl;
return 0;
}
运行结果预期:
遍历所有元素: 10 20 30 40 50 反向遍历: 50 40 30 20 10
代码解析:
numbers.size()返回 5,循环条件i < numbers.size()确保不会越界。- 反向遍历时,从
size()开始递减到 1,然后访问[i-1]。
示例 3:使用 size() 进行条件判断
size() 可以用于各种条件判断。
实例
#include <iostream>
#include <vector>
#include <string>
void processVector(const std::vector<int>& v) {
if(v.size() == 0) {
std::cout << "容器为空,无需处理" << std::endl;
return;
}
if(v.size() == 1) {
std::cout << "容器只有一个元素: " << v[0] << std::endl;
return;
}
std::cout << "容器有 " << v.size() << " 个元素" << std::endl;
// 检查是否足够大
if(v.size() >= 10) {
std::cout << "这是一个大容器" << std::endl;
}
}
int main() {
std::vector<int> empty;
std::vector<int> single = {42};
std::vector<int> normal = {1, 2, 3, 4, 5};
std::vector<int> large(15, 1);
processVector(empty);
processVector(single);
processVector(normal);
processVector(large);
return 0;
}
#include <vector>
#include <string>
void processVector(const std::vector<int>& v) {
if(v.size() == 0) {
std::cout << "容器为空,无需处理" << std::endl;
return;
}
if(v.size() == 1) {
std::cout << "容器只有一个元素: " << v[0] << std::endl;
return;
}
std::cout << "容器有 " << v.size() << " 个元素" << std::endl;
// 检查是否足够大
if(v.size() >= 10) {
std::cout << "这是一个大容器" << std::endl;
}
}
int main() {
std::vector<int> empty;
std::vector<int> single = {42};
std::vector<int> normal = {1, 2, 3, 4, 5};
std::vector<int> large(15, 1);
processVector(empty);
processVector(single);
processVector(normal);
processVector(large);
return 0;
}
运行结果预期:
容器为空,无需处理 容器只有一个元素: 42 容器有 5 个元素 这是一个大容器
代码解析:
size() == 0可用于检查容器是否为空。size() == 1可用于检查是否只有一个元素。size() >= 10可用于检查容器是否足够大。
示例 4:size() 与 capacity() 的区别
size() 返回元素个数,capacity() 返回分配的存储空间。
实例
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers;
std::cout << "初始状态:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 添加元素
for(int i = 0; i < 5; ++i) {
numbers.push_back(i + 1);
}
std::cout << "\n添加 5 个元素后:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 使用 resize 改变大小
numbers.resize(10);
std::cout << "\nresize(10) 后:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 使用 reserve 预留空间
numbers.reserve(100);
std::cout << "\nreserve(100) 后:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
return 0;
}
#include <vector>
int main() {
std::vector<int> numbers;
std::cout << "初始状态:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 添加元素
for(int i = 0; i < 5; ++i) {
numbers.push_back(i + 1);
}
std::cout << "\n添加 5 个元素后:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 使用 resize 改变大小
numbers.resize(10);
std::cout << "\nresize(10) 后:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 使用 reserve 预留空间
numbers.reserve(100);
std::cout << "\nreserve(100) 后:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
return 0;
}
运行结果预期:
初始状态: size: 0 capacity: 0 添加 5 个元素后: size: 5 capacity: 5 resize(10) 后: size: 10 capacity: 10 reserve(100) 后: size: 10 capacity: 100
代码解析:
size()是实际元素的数量。capacity()是为元素分配的存储空间大小。resize()改变size(),也会调整capacity()(如果需要)。reserve()只改变capacity(),不改变size()。
示例 5:使用 size() 计算平均值
使用 size() 配合循环计算统计值。
实例
#include <iostream>
#include <vector>
int main() {
std::vector<double> scores = {85.5, 92.0, 78.5, 90.0, 88.5};
// 计算总和
double sum = 0;
for(size_t i = 0; i < scores.size(); ++i) {
sum += scores[i];
}
// 使用 size() 计算平均值
double average = sum / scores.size();
std::cout << "学生成绩: ";
for(double s : scores) {
std::cout << s << " ";
}
std::cout << std::endl;
std::cout << "总人数: " << scores.size() << std::endl;
std::cout << "总成绩: " << sum << std::endl;
std::cout << "平均分: " << average << std::endl;
return 0;
}
#include <vector>
int main() {
std::vector<double> scores = {85.5, 92.0, 78.5, 90.0, 88.5};
// 计算总和
double sum = 0;
for(size_t i = 0; i < scores.size(); ++i) {
sum += scores[i];
}
// 使用 size() 计算平均值
double average = sum / scores.size();
std::cout << "学生成绩: ";
for(double s : scores) {
std::cout << s << " ";
}
std::cout << std::endl;
std::cout << "总人数: " << scores.size() << std::endl;
std::cout << "总成绩: " << sum << std::endl;
std::cout << "平均分: " << average << std::endl;
return 0;
}
运行结果预期:
学生成绩: 85.5 92.0 78.5 90.0 88.5 总人数: 5 总成绩: 434.5 平均分: 86.9
代码解析:
- 使用
size()可以方便地计算平均值。 sum / scores.size()得出平均分数。

C++ 容器类 <vector>