Мы ищем динамикой наибольшую подпоследовательность для отрезка [0; i] где гарантировано должен быть i-ый элемент. Потом выбираем из всех наибольшее число.
DigitalAnnihilator
Исключено использование оператора '>>' без защитных конструкций.
Причина: Оператор >> является частью стандартной библиотеки C++, как и большинство функций/классов он способен выбрасывать исключения. В свою очередь, при вводе неверной информации по стандарту не гарантированно инициализация переменной переданной в оператор >> как параметр, что является undefined behavior. То есть, при неверном вводе данных в зависимости от компилятора будет определено следующие сценарии поведения:
DigitalAnnihilator
- throw exeption и в отсутствии try-catch конструкции над ним - креш в рантайме - инициализация переменной default значением - инициализация переменной мусором
Исключения: При наличии try-catch конструкции оборачивающей ввод данных.
Рекомендация: Лучше использовать функцию getline и явное преобразование данных из char* в необходимый тип данных.
DigitalAnnihilator
При использовании инкрементирующего оператора следует использовать только его префиксную форму.
DigitalAnnihilator
Причина: При использованной оператора префиксной формы происходит увеличение значения, после чего return операция его уже нового значения. В отличие от префиксной - постфиксная форма предполагает сначала return текущего значения, после чего увеличение текущего значения, что влечет за собой более длительный процесс выполнения операции и использование в 2 раза больше памяти для сохранения предыдущего значения.
DigitalAnnihilator
Исключение: Особые алгоритмы требующие данного поведения.
Примечание: Операция инкремента равно-справедлива для всех типов для которых она определена, в том числе и итераторов, что может повлечь значительные потери в производительности, хотя на первый взгляд, если ограничиваться integer, данного явления не наблюдается.
DigitalAnnihilator
При использовании сокращенной формы цикла for необходимо итерировать её элементы по константной ссылке.
Причина: При использовании константной ссылки, избегаются следующие ситуации снижающие производительность & безопасность кода: - Ссылка обеспечивает гарантированное использование объекта без создания его копии - Константа обеспечивает гарантированную защиту ссылки от модификации Таким образом снижается потребление памяти, время выполнения кода, а так же код остается безопасным.
DigitalAnnihilator
Исключения: Константность может быть не использована в силу необходимости модификации элементов коллекции.
Примечание: Передача элементов по значению в цикле исключена. Приемлем только вариант подобный: for ( auto& element : collection)
Answers & Comments
Verified answer
Мы ищем динамикой наибольшую подпоследовательность для отрезка [0; i] где гарантировано должен быть i-ый элемент. Потом выбираем из всех наибольшее число.
Причина:
Оператор >> является частью стандартной библиотеки C++, как и большинство функций/классов он способен выбрасывать исключения.
В свою очередь, при вводе неверной информации по стандарту не гарантированно инициализация переменной переданной в оператор >> как параметр, что является undefined behavior.
То есть, при неверном вводе данных в зависимости от компилятора будет определено следующие сценарии поведения:
- инициализация переменной default значением
- инициализация переменной мусором
Исключения:
При наличии try-catch конструкции оборачивающей ввод данных.
Рекомендация:
Лучше использовать функцию getline и явное преобразование данных из char* в необходимый тип данных.
При использованной оператора префиксной формы происходит увеличение значения, после чего return операция его уже нового значения.
В отличие от префиксной - постфиксная форма предполагает сначала return текущего значения, после чего увеличение текущего значения, что влечет за собой более длительный процесс выполнения операции и использование в 2 раза больше памяти для сохранения предыдущего значения.
Особые алгоритмы требующие данного поведения.
Примечание:
Операция инкремента равно-справедлива для всех типов для которых она определена, в том числе и итераторов, что может повлечь значительные потери в производительности, хотя на первый взгляд, если ограничиваться integer, данного явления не наблюдается.
Причина:
При использовании константной ссылки, избегаются следующие ситуации снижающие производительность & безопасность кода:
- Ссылка обеспечивает гарантированное использование объекта без создания его копии
- Константа обеспечивает гарантированную защиту ссылки от модификации
Таким образом снижается потребление памяти, время выполнения кода, а так же код остается безопасным.
Константность может быть не использована в силу необходимости модификации элементов коллекции.
Примечание:
Передача элементов по значению в цикле исключена. Приемлем только вариант подобный:
for ( auto& element : collection)