std::ranges::fill_n
来自cppreference.com
定义于头文件 <algorithm>
|
||
调用签名 |
||
template< class T, std::output_iterator<const T&> O > constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value ); |
(C++20 起) | |
赋值给定的 value
给范围 [first, first + n)
中的所有元素。
此页面上描述的仿函数实体是 niebloid ,即:
实际上,它们能以函数对象,或以某些特殊编译器扩展实现。
参数
first | - | 要修改的元素范围的起始 |
n | - | 要修改的元素数 |
value | - | 要赋的值 |
返回值
比较等于 first + n
的迭代器。
复杂度
准确赋值 n
次。
可能的实现
struct fill_n_fn { template<class T, std::output_iterator<const T&> O> constexpr O operator()(O first, std::iter_difference_t<O> n, const T& value) const { for (std::iter_difference_t<O> i{}; i != n; *first = value, ++first, ++i); return first; } }; inline constexpr fill_n_fn fill_n{}; |
示例
运行此代码
#include <algorithm> #include <iostream> #include <string> #include <vector> auto print(const auto& v) { for (const auto& elem : v) { std::cout << elem << " "; } std::cout << '\n'; } int main() { constexpr auto n{8}; std::vector<std::string> v(n, "░░"); print(v); std::ranges::fill_n(v.begin(), n, "▓▓"); print(v); }
输出:
░░ ░░ ░░ ░░ ░░ ░░ ░░ ░░ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
参阅
(C++20) |
将一个给定值复制赋值给一个范围内的每个元素 (niebloid) |
(C++20) |
将一定数目的元素复制到一个新的位置 (niebloid) |
(C++20) |
保存函数结果到一个范围中 (niebloid) |
(C++20) |
将一个函数应用于某一范围的各个元素 (niebloid) |
将一个给定值复制赋值给一个范围内的 N 个元素 (函数模板) |