Являются ли fill_n и заполнить одну и ту же функцию, но с разными перегрузками параметров? - PullRequest
7 голосов
/ 19 января 2012

Я изучал функции <algorithm> fill и fill_n, и мне кажется, что они делают одно и то же, но определяются по-разному.

Это правда, и еслинет, чем они отличаются?

Формулировки для их описаний, кажется, примерно одинаковы (что я читал из MSDN в fill_n и fill).

Если они одинаковы, в чем преимущество наличия обеих этих функций?

Это просто дать разработчику больше возможностей, или одна быстрее, чем другая?

1 Ответ

24 голосов
/ 19 января 2012

Они не одна и та же функция, нет. std::fill заполняет диапазон, учитывая начальный и конечный итератор. std::fill_n заполняет определенное количество элементов, учитывая стартовый итератор и количество. fill_n полезно для выходных итераторов, когда вы не можете получить конечный итератор, например, с std::ostream_iterator:

std::fill( std::ostream_iterator<int>(std::cout), ???, x);
                                                  ^^^
                                           what do I put here?

std::fill_n( std::ostream_iterator<int>(std::cout), 25, x);
...