2015-05-02 2 views
1

Я хочу знать, к какому индексу мой массив заполнен. Я знаю один метод, в котором я буду поддерживать временную переменную внутри цикла и будет поддерживать ее обновление, которое, наконец, определит размер.Определение индекса массива, до которого заполняется массив?

Я хочу знать, что помимо этого метода это любой другой способ выполнить эту задачу? Лучше быть O (1) (если возможно) или лучше, чем O (n).

+0

Я предполагаю, что вы имеете в виду «заполненный смежно от нулевого» индекса? Вы можете инициализировать элементы массива в значение часов, а затем начинать с нуля и подсчитывать, сколько заполнено. Почему отслеживание во временной переменной не достаточно хорошо? Что вы на самом деле пытаетесь достичь? Технически существует много, много и много способов сделать это, хотя многие из них неэффективны. –

+1

@i_am_jorf Это будет решение O (n). Исправьте меня, если я ошибаюсь –

+1

Да, так? Вы не указали, как быстро вы этого хотите. Ваш вопрос слишком туманный. –

ответ

2

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

Пара общие способы обработки, что:

  • Отслеживайте «действительных» элементов, как вы сами предложенные в этой должности.
  • есть элемент дозорного, который отмечает «недостающее» значение и проверяет каждый элемент для него - первый элемент с таким значением будет отмечать «конец заполненного массива». Для ссылочных типов вы можете использовать null, для других типов иногда существует определенное значение, которое редко используется и может рассматриваться как «отсутствует» - то есть максимальное значение целых типов.

Второй подход является способом реализуются строки C-стиль - это массив символов до 0 характера - так что вы всегда можете вычислить длину строки, даже если она хранится в более массиве символов.

+0

Я думаю, что на данный момент я выберу наивный способ, который является первым, и после того, как я получу хорошие основы, я постараюсь реализовать второй способ самостоятельно. Спасибо: и извините за мой плохой английский –

+0

конечно +1 с моей стороны для такой хороший ответ :) :) :) –

+2

вы можете добавить это, чтобы ответить: http://en.cppreference.com/w/cpp/container/array/size –

2

будет ли это делать?

size_t size_of_array = sizeof(array)/sizeof(array[0]); 

что-то подобное, и поправьте синтаксис :)

+0

Это говорит вам, насколько велик массив, а не сколько элементов было «заполнено». –

+0

@hg_git Я думаю, что он укажет общий размер массива i.e пустой + заполненный –

+0

массивы представлены указателями, поэтому, когда вы делаете 'sizeof (array)', вы получаете размер указателя – smac89

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