C++ Coding Reference: Filling a Range with a Value using std::fi
- 时间:2020-09-17 11:25:43
- 分类:网络文摘
- 阅读:96 次
The C++ fill is provided in xutility and it allows us to copy a value into a range either vector or array. The std::fill() is defined using template:
1 2 3 4 5 6 7 | template<class _FwdIt, class _Ty> inline void fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val) { // copy _Val through [_First, _Last) _Adl_verify_range(_First, _Last); _Fill_unchecked(_Get_unwrapped(_First), _Get_unwrapped(_Last), _Val); } |
template<class _FwdIt, class _Ty> inline void fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val) { // copy _Val through [_First, _Last) _Adl_verify_range(_First, _Last); _Fill_unchecked(_Get_unwrapped(_First), _Get_unwrapped(_Last), _Val); }
One possible implementation could be:
1 2 3 4 5 6 7 8 9 10 11 12 | template<class _FwdIt, class _Ty> inline void fill_me(_FwdIt _First, _FwdIt _Last, _Ty _Val) { // apply _Val into [_First, _Last) _Adl_verify_range(_First, _Last); auto _UFirst = _Get_unwrapped(_First); const auto _ULast = _Get_unwrapped(_Last); for (; _UFirst != _ULast; ++_UFirst) { *_UFirst = _Val; } } |
template<class _FwdIt, class _Ty> inline void fill_me(_FwdIt _First, _FwdIt _Last, _Ty _Val) { // apply _Val into [_First, _Last) _Adl_verify_range(_First, _Last); auto _UFirst = _Get_unwrapped(_First); const auto _ULast = _Get_unwrapped(_Last); for (; _UFirst != _ULast; ++_UFirst) { *_UFirst = _Val; } }
Example usage:
1 2 3 4 5 6 7 8 9 10 11 | // using std::fill on integers int nums[5]; std::fill(begin(nums), end(nums), 2); // nums is now [2, 2, 2, 2, 2] // using std::fill on doubles vector<double>vals(5); std::fill(begin(vals), end(vals), 1.5); // vals is now [1.5, 1.5, 1.5, 1.5, 1.5] // using std::fill on characters char buf[6]; fill(begin(buf), end(buf), 'a'); // buf is now ['a', 'a', 'a', 'a', 'a', 'a'] |
// using std::fill on integers int nums[5]; std::fill(begin(nums), end(nums), 2); // nums is now [2, 2, 2, 2, 2] // using std::fill on doubles vector<double>vals(5); std::fill(begin(vals), end(vals), 1.5); // vals is now [1.5, 1.5, 1.5, 1.5, 1.5] // using std::fill on characters char buf[6]; fill(begin(buf), end(buf), 'a'); // buf is now ['a', 'a', 'a', 'a', 'a', 'a']
To compute the increasing values into range [first, last), we can use the std::iota() instead.
You can use std::fill() to copy over custom data types such as structs. For example,
1 2 3 4 5 6 | typedef struct { int x, y, z; } custom_data_type; vector<custom_data_type> arr(10); data x = { 1, 2, 3 }; std::fill(begin(arr), end(arr), x); |
typedef struct { int x, y, z; } custom_data_type; vector<custom_data_type> arr(10); data x = { 1, 2, 3 }; std::fill(begin(arr), end(arr), x);
To copy over a specific number of elements, you could use std::fill_n() instead.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:都是马虎惹得祸作文200字 美味在眼前,我手煮我心 离殇 数学题:若用a型箱,正好要装800箱 数学题:神舟五号飞行轨道的近地点高度为200km 数学题:汽车在途中停了一小时,客车速度比汽车慢 数学题:东西南北两条路交叉成直角 数学题:哥哥和弟弟进行100米赛跑 数学题:把14分成若干个自然数的和 数学题:张王李赵刘5人合作完成一项工程
- 评论列表
-
- 添加评论