Это также полезно, если вы хотите повторно инициализировать глобальные или статически распределенные структуры.
Старый способ C использовал memset()
для установки всех элементов на 0. Вы не можете сделать это на C ++ из-за vtables и конструкторов пользовательских объектов.
Поэтому я иногда использую следующие
static Mystruct m;
for(...) {
// re-initialize the structure. Note the use of placement new
// and the extra parenthesis after Mystruct to force initialization.
new (&m) Mystruct();
// do-some work that modifies m's content.
}
Если производительность является проблемой, вот схема, которая проходит только 94 шага, а не 473 другого ответа, избегая обхода и чередования:
\d{4}[ -]?\d{2}\K\d{2}[ -]?\d{4}
Демонстрация: [ 112] https://regex101.com/r/0XMluq/4
Редактировать: В варианте регулярного выражения C # вместо этого можно использовать следующий шаблон, поскольку C # допускает просмотр с переменной длиной.
(?<=\d{4}[ -]?\d{2})\d{2}[ -]?\d{4}
Попробуйте Regex: (?<=\d{4}\d{2})\d{2}\d{4}(?=\d{4})|(?<=\d{4}( |-)\d{2})\d{2}\1\d{4}(?=\1\d{4})
Объяснение:
[110 ]