Как инициализировать все элементы в массиве к одному и тому же номеру в C ++ - PullRequest
17 голосов
/ 23 мая 2010

Я пытаюсь инициализировать массив int со всем, установленным в -1.

Я попробовал следующее, но это не работает. Он устанавливает только первое значение -1. ​​

int directory[100] = {-1};

Почему это не работает правильно?

Ответы [ 14 ]

0 голосов
/ 01 сентября 2016

Причина, по которой int directory[100] = {-1} не работает, заключается в том, что происходит с инициализацией массива .

Все элементы массива, которые не инициализированы явно, инициализируются неявно так же, как объекты, имеющие статическую продолжительность хранения.

int с , неявно инициализированными :

инициализируется нулем без знака

Все элементы массива, которые не инициализированы явно, инициализируются неявно так же, как объекты, имеющие статическую продолжительность хранения.

C ++ 11 представлен begin и end, которые предназначены для массивов!

Это означает, что при наличии массива (а не только указателя), такого как directory, вы можете использовать fill, как было предложено в нескольких ответах:

fill(begin(directory), end(directory), -1)

Допустим, вы пишете код, подобный этому, но затем решаете повторно использовать функциональность, забыв о том, как вы его реализовали, но вы решили изменить размер directory на 60. Если вы написали код с использованием begin и end тогда все готово.
Если, с другой стороны, вы сделали это: fill(directory, directory + 100, -1), тогда вам лучше не забывать изменить это 100 на 60, иначе вы получите неопределенное поведение.

0 голосов
/ 09 декабря 2014

всемогущий memset () выполнит работу для контейнеров массивов и std в C / C ++ / C ++ 11 / C ++ 14

0 голосов
/ 14 августа 2013

Просто используйте этот цикл.

for(int i =0 ; i < 100 ; i++) directory[i] =0;
0 голосов
/ 23 мая 2010

Невозможно сделать то, что вы пытаетесь сделать с необработанным массивом (если вы явно не перечислите все 100 -1 с в списке инициализатора), вы можете сделать это с помощью vector:

vector<int> directory(100, -1);

Кроме того, вы можете создать массив и установить значения на -1, используя один из других упомянутых методов.

...