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

C++ <vector> size 函数

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


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;
}

运行结果预期:

空 vector 的大小: 0
有元素 vector 的大小: 5
添加 3 个元素后的大小: 3

代码解析:

  1. 空 vector 的 size() 返回 0。
  2. 有 5 个元素的 vector 返回 5。
  3. 每次 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;
}

运行结果预期:

遍历所有元素: 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;
}

运行结果预期:

容器为空,无需处理
容器只有一个元素: 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;
}

运行结果预期:

初始状态:
  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;
}

运行结果预期:

学生成绩: 85.5 92.0 78.5 90.0 88.5
总人数: 5
总成绩: 434.5
平均分: 86.9

代码解析:

  • 使用 size() 可以方便地计算平均值。
  • sum / scores.size() 得出平均分数。

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