#cpp
Есть ли разница между vectorv (istream_iterator (cin),istream_iterator ()); и vector v; copy (istream_iterator (cin),istream_iterator (),back_inserter(v)); ?
Ответы
Ответ 1
Первый вариант предпочтительнее, т.к. он более лаконичен и позволяет объявить объект константным. Однако, чтобы он работал ожидаемым образом, следует заменить круглые скобки на фигурные: vectorv {istream_iterator (cin),istream_iterator ()}; Иначе, исходная конструкция будет интерпретирована компилятором как объявление функции v, принимающей 2 аргумента (один типа istream_iterator с именем cin, второй - безымянный указатель на функцию без аргументов, возвращающую istream_iterator ) и возвращающей vector . Более подробно о том, почему так происходит можно почитать например в вики на странице most vexing parse. С учетом исправления синтаксиса, разницы в конечном результате нет. Но зачем делать сложнее, когда можно проще? Ответ 2
В принципе, разница не велика, результат один и тот же. Просто в первом случае вызывается конструктор копирования, а во втором случае сначала вызывается стандартный конструктор, затем уже происходит копирование.
Комментариев нет:
Отправить комментарий