2016-04-27 4 views
1

Я создал статический массив в сКоличество объявленных элементов в массиве с

int array[15];

К примеру, я «заполнены» первые 5 элементов моего массива.

Это означает, что у меня все еще есть 10 свободных элементов, не так ли?

Что мне делать, чтобы знать, что я уже использовал пять элементов моего массива? Как узнать количество элементов, которые я использовал?

+1

Вам нужно решить, действительно ли значения, которые у вас есть в массиве, или они просто неактивны. В вашем массиве всегда есть что-то, потому что каждый адрес в памяти содержит что-то. Если у вас есть [автоматическая переменная] (https://en.wikipedia.org/wiki/Automatic_variable), исходное содержимое массива - это то, что происходит по этому адресу в памяти, где хранится ваш массив. Если у вас есть [статическая переменная] (https://en.wikipedia.org/wiki/Static_variable), то содержимое массива изначально равно нулю. – mihai

+0

Если бы вы ожидали, что массив будет автоматически отслеживать это для вас каким-либо образом, если вам нужен способ «спросить» массив, сколько элементов вы заполнили, я боюсь, что вам не повезло. Вы должны как-то следить за этим самим. (Другими словами, C-массивы - это * не * C++ std :: векторы.) –

ответ

3

Что мне делать, чтобы знать, что я уже «использовал» пять элементов моего массива? Как узнать количество элементов, которые я использовал?

Существует несколько вариантов.

  1. Используйте значение дозорного устройства, которое указывает элементы, которые были заполнены. Предположим, вы используете 99999 для значения дозорного устройства. Если n-й элемент массива имеет значение 99999, вы знаете, что вы заполнили n-1 элементов.

  2. Используйте другую переменную, чтобы отслеживать это.

    size_t numFilledElements = 0; 
    
    for (...) 
    { 
        // Fill up an element 
    
        // Increment the counter. 
        ++numFilledElements; 
    } 
    

Мое личное предпочтение будет использовать второй подход. Тогда вам не придется беспокоиться о контрольной стоимости.

+0

Что касается подхода 2 (что действительно является предпочтительным), то принято писать 'array [numFilledElements ++] = whatever'. Отличный способ понять разницу между префиксным и постфиксным '++' заключается в том, чтобы наблюдать, почему postfix '++' - это то, что вы хотите здесь, в то время как префикс не будет делать правильные вещи. (Получается, что вам может понадобиться префикс, если у вас есть массив на основе 1.) –

+0

@SteveSummit, мне сложно оценить, насколько распространено сочетание значения значения элемента и увеличения счетчика до но я лично разделяю их на два заявления. –

+1

Рекомендуем использовать 'size_t', а не' int' для 'numFilledElements'. – chux

 Смежные вопросы

  • Нет связанных вопросов^_^