Мне кажется, это нормально. Нет необходимости создавать явную копию a2[i]
.
Единственная проблема, которую я вижу с чем-то вроде этого, заключается в том, что аргумент внутри []
должен иметь тип std::size_t
вместо int
. Эти целочисленные типы охватывают различные диапазоны значений, и хотя std::size_t
является целым числом без знака, int
является целым числом со знаком. Остерегайтесь использования отрицательных индексов или индексов после последнего элемента, скорее всего, это приведет к неопределенному поведению из-за доступа за пределы. Но если вы можете гарантировать, что значения в a2
всегда являются действительными индексами для a1
, тогда эти int
значения будут неявно преобразованы в std::size_t
, и все будет работать правильно (что, похоже, имеет место в примере кода в вашем вопросе).
Я также предлагаю преобразовать переменную l oop i
в std::size_t
(и использовать ++i
вместо i++
, если вы хотите быть идеальным :).
В современном C ++ вы также можете использовать диапазон на основе, поэтому вам вообще не нужно использовать явную индексную переменную для доступа к a2
значениям:
for (auto indexFromA2 : a2)
a1[indexFromA2] += 5000;
Это меньше подвержен ошибкам, потому что вам нужно писать меньше c logi для управления доступом к элементам (и не нужно указывать типы).