C++ 算法 fill_n() 函数用于为从特定元素开始的范围内指定数量的元素分配新值。
这意味着在 fill_n() 中,我们指定开始位置、要填充的元素数和要填充的值。
用法
template <class OutputIterator, class Size, class T>
void fill_n (OutputIterator first, Size n, const T& val); //until C++ 11
template <class OutputIterator, class Size, class T>
OutputIterator fill_n (OutputIterator first, Size n, const T& val); //since C++ 11
参数
first: 一个输出迭代器,指向要分配值 val 的范围中第一个元素的位置。
val:Value 用于填充范围。
n:填充它的元素数量可以是有符号或无符号整数类型。
返回值
fill_n() 的第一个版本返回 none,fill_n() 的第二个版本返回一个迭代器,该迭代器指向要填充的最后一个元素之后的元素。
复杂度
复杂度在 n 中是线性的。并为每个元素分配一个值。
数据竞争
first 指向的范围内的前 n 个对象被修改。
异常安全
如果元素赋值或迭代器上的操作引发异常,则此函数将引发异常。
请注意,无效参数会导致未定义的行为。
例子1
让我们看一个简单的例子来演示 fill_n() 的使用:
#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;
int main() {
fill_n(ostream_iterator<int>(cout, ","), 10, 3);
return 0;
}
输出:
3,3,3,3,3,3,3,3,3,3,
例子2
让我们看另一个简单的例子:
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
using namespace std;
vector <int> v;
for ( auto i = 0 ; i < 9 ; ++i )
v.push_back( 0 );
cout << " vector v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
// Fill the first 3 positions with a value of 1, saving position.
auto pos = fill_n( v.begin(), 3, 1 );
cout << "modified v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
// Fill the next 3 positions with a value of 2, using last position.
fill_n( pos, 3, 2 );
cout << "modified v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
// Fill the last 3 positions with a value of 3, using relative math.
fill_n( v.end()-3, 3, 3 );
cout << "modified v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
return 0;
}
输出:
vector v = ( 0 0 0 0 0 0 0 0 0 ) modified v = ( 1 1 1 0 0 0 0 0 0 ) modified v = ( 1 1 1 2 2 2 0 0 0 ) modified v = ( 1 1 1 2 2 2 3 3 3 )
例子3
让我们看另一个简单的例子:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<int> vect(8);
// calling fill to initialize first four values
// to 7
fill_n(vect.begin(), 3, 1);
for (int i=0; i<vect.size(); i++)
cout << ' ' << vect[i];
cout << '\n';
// calling fill to initialize 3 elements from
// "begin()+3" with value 4
fill_n(vect.begin() + 3, 3, 4);
for (int i=0; i<vect.size(); i++)
cout << ' ' << vect[i];
cout << '\n';
return 0;
}
输出:
1 1 1 0 0 0 0 0 1 1 1 4 4 4 0 0
示例 4
让我们看另一个简单的例子:
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
vector <int> vec;
vector <int>::iterator Iter1;
int i;
for (i = 10; i <= 20; i++)
vec.push_back(i);
cout <<"Vector vec data:";
for (Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout <<*Iter1<<" ";
cout <<endl;
// fill the last 3 positions for 6 position with a value of 9
cout <<"\nOperation:fill_n(vec.begin() + 3, 6, 9)\n";
fill_n(vec.begin() + 3, 6, 9);
cout <<"Modified vec data:";
for (Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout <<*Iter1<<" ";
cout <<endl;
return 0;
}
输出:
Vector vec data:10 11 12 13 14 15 16 17 18 19 20 Operation:fill_n(vec.begin() + 3, 6, 9) Modified vec data:10 11 12 9 9 9 9 9 9 19 20
相关用法
- C++ Algorithm fill()用法及代码示例
- C++ Algorithm remove_if()用法及代码示例
- C++ Algorithm remove()用法及代码示例
- C++ Algorithm max_element()用法及代码示例
- C++ Algorithm set_union()用法及代码示例
- C++ Algorithm next_permutation()用法及代码示例
- C++ Algorithm upper_bound()用法及代码示例
- C++ Algorithm minmax()用法及代码示例
- C++ Algorithm remove_copy_if()用法及代码示例
- C++ Algorithm random_shuffle()用法及代码示例
- C++ Algorithm pop_heap()用法及代码示例
- C++ Algorithm replace()用法及代码示例
- C++ Algorithm set_intersection()用法及代码示例
- C++ Algorithm lower_bound()用法及代码示例
- C++ Algorithm transform()用法及代码示例
- C++ Algorithm set_difference()用法及代码示例
- C++ Algorithm is_sorted()用法及代码示例
- C++ Algorithm equal_range()用法及代码示例
- C++ Algorithm minmax_element()用法及代码示例
- C++ Algorithm stable_sort()用法及代码示例
注:本文由纯净天空筛选整理自 C++ Algorithm fill_n()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。