C++ <vector> функция size
sizeявляется одной из наиболее часто используемых и фундаментальных функций в vector, используется дляполучения количества элементов в контейнере。
size— функция-член класса контейнера, используемая длявозврата количества элементов, которые в данный момент содержатся в контейнере. Это значение представляет фактический объём данных, хранящихся в vector.
size— наиболее часто используемая функция при работе с vector, применяемая в таких сценариях, как обход в цикле, проверка границ и проверка условий.
Определения слов: sizeозначает "size", указывая на количество элементов в контейнере.
Базовый синтаксис и параметры
size— функция-член класса контейнера; для её вызова не требуется параметров.
Формат синтаксиса
size_type size() const;
Описание параметра
- Параметр: Нет параметров
sizeне принимает параметров.
Описание функции
- Возвращаемое значение: возвращает
size_typeТип (обычноsize_t), указывающее на текущее количество элементов в контейнере. - Действие: Возвращает неотрицательное целое число, указывающее количество элементов, фактически хранящихся в контейнере.
- Примечание:
size()Возвращается количество элементов, а не вместимость. Можно использоватьcapacity(), чтобы получить вместимость.
Пример
Давайте тщательно освоим это на серии примеровsizeИспользование.
Пример 1: Базовое использование — получение количества элементов
Пример
#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
Анализ кода:
- пустого вектора
size()Возвращает 0. - Вектор с 5 элементами возвращает 5.
- Каждый раз
push_backПосле добавления элемента,size()увеличится на 1.
Пример 2: Использование size() в цикле
size()чаще всего используется для управления итерациями цикла.
Пример
#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 <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 <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 <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()Вычислить средний балл.
Другие расширения