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:
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:
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:
// 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,
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) —
312 wordsLast Post: How to Get List of IP addresses in BASH using hostname and tr commands?
Next Post: C++ Advanced Topics: 10 Questions