Алгоритм fill_n()

Алгоритм fill_n()

template class ForwardIterator, class Size, class Type

void

fill_n( ForwardIterator first,

Size n, const Type& value );

fill_n() присваивает count элементам из диапазона [first,first+count) значение value.

#include algorithm

#include vector

#include string

#include iostream.h

class print_elements {

public:

void operator()( string elem ) {

cout elem

( _line_cnt++%8 ? " " : " " );

}

static void reset_line_cnt() { _line_cnt = 1; }

private:

static int _line_cnt;

};

int print_elements::_line_cnt = 1;

/* печатается:

исходная последовательность элементов массива:

0 1 1 2 3 5 8

массив после fill_n( ia+2, 3, 9 ):

0 1 9 9 9 5 8

исходная последовательность строк:

Stephen closed his eyes to hear his boots

crush crackling wrack and shells

последовательность после применения fill_n():

Stephen closed his xxxxx xxxxx xxxxx xxxxx xxxxx

xxxxx crackling wrack and shells

*/

int main()

{

int value = 9; int count = 3;

int ia[] = { 0, 1, 1, 2, 3, 5, 8 };

ostream_iterator int iofile( cout, " " );

cout "исходная последовательность элементов массива: ";

copy( ia, ia+7, iofile ); cout " ";

fill_n( ia+2, count, value );

cout "массив после fill_n( ia+2, 3, 9 ): ";

copy( ia, ia+7, iofile ); cout " ";

string replacement( "xxxxx" );

string sa[] = { "Stephen", "closed", "his", "eyes", "to",

"hear", "his", "boots", "crush", "crackling",

"wrack", "and", "shells" };

vector string, allocatorsvec( sa, sa+13 );

cout "исходная последовательность строк: ";

for_each( svec.begin(), svec.end(), print_elements() );

cout " ";

fill_n( svec.begin()+3, count*2, replacement );

print_elements::reset_line_cnt();

cout "последовательность после применения fill_n(): ";

for_each( svec.begin(), svec.end(), print_elements() );

cout " ";

}