Разъяснение постфиксных / префиксных операторов на итераторах

0

В Accelerated C++ Andrew Koenig он пишет следующий код для введения в шаблоны и общие функции. Этот код пропускает первый элемент в контейнере? Или он копирует первый объект-итератор до приращения:

template<class In, class Out>
Out copy(In begin, In end, Out dest)
{
while (begin != end)
    *dest++ = *begin++;
return dest;
}

Другими словами, это ведет себя так же, как и его код?:

template<class In, class Out>
Out copy(In begin, In end, Out dest)
{
while (begin != end)
    *dest = *begin;
    dest++;  begin++;
return dest;
}
  • 0
    Я думал только, что мне интересно, если в *dest++ = *begin++ не указан порядок приращения, но во втором примере вы указали порядок для постинкремента.
Теги:

1 ответ

1
Лучший ответ

Сообщение об увеличении итератора (или что-то еще в этом случае) может показаться запутанным, но то, что он делает, довольно прямолинейно. Он копирует значение, увеличивает исходное и возвращает копию. Таким образом, местоположение, на которое ссылается "* dest++", совпадает с "* dest", единственное отличие состоит в том, что после завершения инструкции dest теперь будет ссылаться на следующую итерацию в итерации.

Единственные проблемы с этим возникают, когда программисты многократно используют инкрементированную переменную в одном выражении. (Который обычно используется только как мозговой тизер, и результирующий эффект варьируется от языка к языку)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню