Skip to main content

std::fill_n() algorithm

// (1)
template< class OutputIt, class Size, class T >
constexpr OutputIt fill_n( OutputIt first, Size count, const T& value );

// (2)
template< class ExecutionPolicy, class ForwardIt, class Size, class T >
ForwardIt fill_n( ExecutionPolicy&& policy,
ForwardIt first, Size count, const T& value );
  • (1) Assigns the given value to the first count elements in the range beginning at first if count > 0.
    Does nothing otherwise.

  • (2) Same as (1), but executed according to policy.

    Overload Resolution

    These overloads participate in overload resolution only if std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>  (until C++20) std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>  (since C++20) is true.

Parameters

first

The range of elements to modify.

count

Number of elements to modify.

value

The value to assign.

policy

The execution policy to use. See execution policy for details.

Type requirements

OutputItOutputIterator
LegacyForwardIteratorLegacyForwardIterator
Size

Must be convertible to integral type.

value

Must be writable to first.

Return value

Iterator one past the last element assigned if count > 0, first otherwise. (since C++11)
(none) (until C++11)

Complexity

Exactly std::max(0, count) assignments.

Exceptions

The overloads with a template parameter named ExecutionPolicy report errors as follows:

  • If execution of a function invoked as part of the algorithm throws an exception and ExecutionPolicy is one of the standard policies, std::terminate is called. For any other ExecutionPolicy, the behavior is implementation-defined.
  • If the algorithm fails to allocate memory, std::bad_alloc is thrown.

Possible implementation

fill_n (1)
template<class OutputIt, class Size, class T>
OutputIt fill_n(OutputIt first, Size count, const T& value)
{
for (Size i = 0; i < count; i++)
*first++ = value;
return first;
}

Examples

The following code uses fill_n() to assign -1 to the first half of a vector of integers:

Main.cpp
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
std::vector<int> v1 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

std::fill_n(v1.begin(), 5, -1);

std::copy(begin(v1), end(v1), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
Output
-1 -1 -1 -1 -1 5 6 7 8 9
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.

std::fill_n() algorithm

// (1)
template< class OutputIt, class Size, class T >
constexpr OutputIt fill_n( OutputIt first, Size count, const T& value );

// (2)
template< class ExecutionPolicy, class ForwardIt, class Size, class T >
ForwardIt fill_n( ExecutionPolicy&& policy,
ForwardIt first, Size count, const T& value );
  • (1) Assigns the given value to the first count elements in the range beginning at first if count > 0.
    Does nothing otherwise.

  • (2) Same as (1), but executed according to policy.

    Overload Resolution

    These overloads participate in overload resolution only if std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>  (until C++20) std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>  (since C++20) is true.

Parameters

first

The range of elements to modify.

count

Number of elements to modify.

value

The value to assign.

policy

The execution policy to use. See execution policy for details.

Type requirements

OutputItOutputIterator
LegacyForwardIteratorLegacyForwardIterator
Size

Must be convertible to integral type.

value

Must be writable to first.

Return value

Iterator one past the last element assigned if count > 0, first otherwise. (since C++11)
(none) (until C++11)

Complexity

Exactly std::max(0, count) assignments.

Exceptions

The overloads with a template parameter named ExecutionPolicy report errors as follows:

  • If execution of a function invoked as part of the algorithm throws an exception and ExecutionPolicy is one of the standard policies, std::terminate is called. For any other ExecutionPolicy, the behavior is implementation-defined.
  • If the algorithm fails to allocate memory, std::bad_alloc is thrown.

Possible implementation

fill_n (1)
template<class OutputIt, class Size, class T>
OutputIt fill_n(OutputIt first, Size count, const T& value)
{
for (Size i = 0; i < count; i++)
*first++ = value;
return first;
}

Examples

The following code uses fill_n() to assign -1 to the first half of a vector of integers:

Main.cpp
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
std::vector<int> v1 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

std::fill_n(v1.begin(), 5, -1);

std::copy(begin(v1), end(v1), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
Output
-1 -1 -1 -1 -1 5 6 7 8 9
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.