Здравствуйте, читатели!
Существует изящный способ инициализации значений в C++ STL, известный как memset, синтаксис которого выглядит следующим образом:

memset(имямассива, значениеToBeInitializedWith, sizeOfArray);

Теперь это выглядит намного чище, чем это:

for(int i = 0; i ‹ sizeOfArray; i++) имя_массива[i] = 0;

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

Итак, этот memset будет байт за байтом устанавливать память на 0/1. Что плохого в том, что я мог бы использовать его, чтобы установить хотя бы 0/1, верно?

NO!!!

От этой сумасшедшей маленькой полезной функции больше вреда, чем пользы, или, по крайней мере, от того, как мы ее используем во время выполнения CP. Проблема с этим заключается в том, что он устанавливает байты памяти мудро, я бы не стал обсуждать здесь внутренности, оставлю несколько ссылок в конце статьи, но ясное наблюдение, которое я усвоил на собственном горьком опыте, заключалось в том, что это путается с памятью. Хорошо, но когда?

Когда вы делаете это:

memset(имямассива, значениеToBeInitializedWith, sizeOfArray);

имя_массива[любойиндекс] = 1;

Это присвоит сумасшедшее значение, например 1839611860 или что-то в этом роде.

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

Определенно была бы причина для существования memset, но это обсуждение в другой день, и я хотел бы, чтобы читатели усвоили идею, что не используйте memset только потому, что он хорошо выглядит.

Ссылки на ссылки: https://stackoverflow.com/a/14761282, https://cs.calvin.edu/activities/books/rit/chapter5/negative.htm