C++ <vector> функция size

класс контейнера C++ <vector>


sizeявляется одной из наиболее часто используемых и фундаментальных функций в vector, используется дляполучения количества элементов в контейнере。

size— функция-член класса контейнера, используемая длявозврата количества элементов, которые в данный момент содержатся в контейнере. Это значение представляет фактический объём данных, хранящихся в vector.

size— наиболее часто используемая функция при работе с vector, применяемая в таких сценариях, как обход в цикле, проверка границ и проверка условий.

Определения слов: sizeозначает "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 << "Размер вектора с элементами: " << 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. пустого вектораsize()Возвращает 0.
  2. Вектор с 5 элементами возвращает 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 << " размер: " << numbers.size() << std::endl;
    std::cout << " вместимость: " << numbers.capacity() << std::endl;

    // Добавить элементы
    for(int i = 0; i < 5; ++i) {
        numbers.push_back(i + 1);
    }

    std::cout << "\nПосле добавления 5 элементов:" << std::endl;
    std::cout << " размер: " << numbers.size() << std::endl;
    std::cout << " вместимость: " << numbers.capacity() << std::endl;

    // Используйте resize для изменения размера
    numbers.resize(10);

    std::cout << "\nПосле resize(10):" << std::endl;
    std::cout << " размер: " << numbers.size() << std::endl;
    std::cout << " вместимость: " << numbers.capacity() << std::endl;

    // Используйте reserve для предварительного выделения памяти
    numbers.reserve(100);

    std::cout << "\nПосле reserve(100):" << std::endl;
    std::cout << " размер: " << numbers.size() << std::endl;
    std::cout << " вместимость: " << 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>

Другие расширения