Как найти, что массив размера x полностью заполнен или нет, в C ++? - PullRequest
0 голосов
/ 13 июля 2020
int size = 10;
int arr[size] = {};
for(int i = 0; i < size; i++)
    arr[i] = i;

Теперь, как мне узнать, заполнен массив или нет в коде. Я знаю arr[size - 1] = 9, но что такое arr[size] и выше? Как сравнить arr[size] == ? с помощью оператора if или есть другой способ? Я использую убнуту и ​​это компилятор g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Теперь как мне узнать, заполнен массив или нет?

Все массивы всегда «заполнены». Массив из N элементов содержит N элементов и не менее

Элемент тривиального типа может иметь неопределенное значение. Невозможно определить, является ли значение неопределенным. Поведение при чтении неопределенного значения не определено.

В вашем примере вы инициализировали массив значением, поэтому он заполняется элементами, инициализированными значением (до l oop, где вы меняете значения). Что в случае int означает, что массив заполнен нулями. Проверить, равен ли элемент нулю, можно так:

if (arr[i])
    // not zero
else
    // is zero

, но что такое arr [size] и за его пределами?

Не существует «arr[size] и за пределами», потому что эти индексы находятся за пределами массива. Поведение доступа к значениям за пределами массива не определено.

1 голос
/ 13 июля 2020

Когда вы используете необработанные массивы, вы несете ответственность за обработку этой памяти и отслеживание того, что было написано. Вместо этого это звучит как хороший вариант использования std:vector. Особенно за счет использования функции reserve(size). С запасом вы указываете, сколько памяти нужно сохранить для ваших данных, а затем вы можете заполнить этот массив push_back(content), получая текущее количество заполненных элементов с помощью size() (конечно, резерв - это просто оптимизация, чтобы избежать перераспределения памяти потому что даже без него вектор будет динамически расти).

...