std::fill
出自cppreference.com
| 在標頭 <algorithm> 定義
|
||
| (1) | ||
(C++20 起為 constexpr) (C++26 前) |
||
| |
(C++26 起) | |
| (2) | ||
| |
(C++17 起) (C++26 前) |
|
| |
(C++26 起) | |
1) 將給定的
value 賦給 [first, last) 中的所有元素。2) 同 (1),但按照
policy 執行。 此重載只有在滿足以下所有條件時才會參與重載決議:
|
|
(C++20 前) |
|
|
(C++20 起) |
如果 value 不可寫入 first,那麼程序非良構。
參數
| first, last | - | 要修改的元素範圍的迭代器對 |
| value | - | 要賦的值 |
| policy | - | 所用的執行策略 |
| 類型要求 | ||
-ForwardIt 必須滿足老式向前迭代器 (LegacyForwardIterator) 。
| ||
複雜度
賦值 std::distance(first, last) 次。
異常
擁有名為 ExecutionPolicy 的模板形參的重載按下列方式報告錯誤:
- 如果作為算法一部分調用的函數的執行拋出異常,且
ExecutionPolicy是標準策略之一,那麼調用 std::terminate。對於任何其他ExecutionPolicy,行為由實現定義。 - 如果算法無法分配內存,那麼拋出 std::bad_alloc。
可能的實現
| fill (1) |
|---|
template<class ForwardIt,
class T = typename std::iterator_traits<ForwardIt>::value_type>
void fill(ForwardIt first, ForwardIt last, const T& value)
{
for (; first != last; ++first)
*first = value;
}
|
註解
| 功能特性測試宏 | 值 | 標準 | 功能特性 |
|---|---|---|---|
__cpp_lib_algorithm_default_value_type |
202403 |
(C++26) | 算法中的列表初始化 (1,2) |
示例
運行此代碼
#include <algorithm>
#include <complex>
#include <iostream>
#include <vector>
void println(const auto& seq)
{
for (const auto& e : seq)
std::cout << e << ' ';
std::cout << '\n';
}
int main()
{
std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7, 8};
println(v);
// 将所有元素设为 8
std::fill(v.begin(), v.end(), 8);
println(v);
std::vector<std::complex<double>> nums{{1, 3}, {2, 2}, {4, 8}};
println(nums);
#ifdef __cpp_lib_algorithm_default_value_type
std::fill(nums.begin(), nums.end(), {4, 2});
#else
std::fill(nums.begin(), nums.end(), std::complex<double>{4, 2});
#endif
println(nums);
}
輸出:
0, 1, 2, 3, 4, 5, 6, 7, 8
8, 8, 8, 8, 8, 8, 8, 8, 8
(1,3), (2,2), (4,8)
(4,2), (4,2), (4,2)
缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
| 缺陷報告 | 應用於 | 出版時的行為 | 正確行為 |
|---|---|---|---|
| LWG 283 | C++98 | T 需要是可複製賦值 (CopyAssignable) 的,但是 T 不一定可寫入 ForwardIt
|
改成要求可寫入 |
參閱
| 以複製的方式賦給定值到範圍中 N 個元素 (函數模板) | |
(C++11) |
複製範圍中元素到新位置 (函數模板) |
| 賦連續函數調用結果到範圍中所有元素 (函數模板) | |
| 應用函數到元素範圍,並在目標範圍存儲結果 (函數模板) | |
(C++20) |
賦給定值到範圍中元素 (算法函數對象) |