📅  最后修改于: 2020-10-17 04:24:49             🧑  作者: Mango
C++ STL algorithm.fill_n()函数用于将新值分配给以特定元素开头的范围内指定数量的元素。
这意味着在fill_n()中,我们指定开始位置,要填充的元素数和要填充的值。
template
void fill_n (OutputIterator first, Size n, const T& val); //until C++ 11
template
OutputIterator fill_n (OutputIterator first, Size n, const T& val); //since C++ 11
first:一个输出迭代器,指向要分配值val的范围内第一个元素的位置。
val:用于填充范围的值。
n:要填充的元素数可以是有符号或无符号整数类型。
fill_n()的第一个版本不返回任何内容,fill_n()的第二个版本返回一个迭代器,该迭代器指向在要填充的最后一个元素之后的元素。
复杂度在n中是线性的。并为每个元素分配一个值。
在first指向的范围内的前n个对象被修改。
如果元素分配或迭代器上的操作引发异常,则此函数引发异常。
请注意,无效的参数会导致未定义的行为。
让我们看一个简单的示例来演示fill_n()的用法:
#include
#include
#include
using namespace std;
int main() {
fill_n(ostream_iterator(cout, ","), 10, 3);
return 0;
}
输出:
3,3,3,3,3,3,3,3,3,3,
让我们看另一个简单的例子:
#include
#include
#include
int main()
{
using namespace std;
vector 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 )
让我们看另一个简单的例子:
#include
#include
#include
using namespace std;
int main()
{
vector vect(8);
// calling fill to initialize first four values
// to 7
fill_n(vect.begin(), 3, 1);
for (int i=0; i
输出:
1 1 1 0 0 0 0 0
1 1 1 4 4 4 0 0
让我们看另一个简单的例子:
#include
#include
#include
using namespace std;
int main()
{
vector vec;
vector ::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 <
输出:
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