P341
1 写入输入序列的元素
fill(iterator_beg, iterator_end, value)
想迭代器范围每个元素写入value,这是一种安全的写入操作。
2 不检查写入操作的算法
fill_n(iterator_beg, count, value)
往迭代器开始位置写入count个value值,如果写入的容器大小小于count,那么会发生运行时错误! VC6.0下验证:编译没错,但是运行出错!
eg.
上程序中,ivec的大小要大于等于fill_n中的第二个参数count,如果大于count,fill_n的结果会改写ivec前count个值,ivec后
面的值保持不变, 有图有真相!
3 引入back_inserter
这个函数是迭代器适配器,它的参数为一个容器的引用,back_inserter(某容器); 生成一个绑定在该容器上的插入迭代器。
在通过这个迭代器给元素赋值时,赋值运算将调用push_back在容器中添加一个具有指定值的元素,因此这是一种安全的
操作。
eg.
vector<int> ivec; //ivec为空
fill_n(bac_inserter(ivec), 10, 0); //在ivec中插入10个元素0
4 写入到目标迭代器的算法
第三类算法向目标迭代器写入未知个数的元素。
5 算法的_copy版本
replace_copy(iterator_from_beg, iterator_from_end, iterator_to, finded_value, replace_value);
函数把迭代器iterator_from_beg, iterator_from_end之间的元素中值的副本为finded_value改为repalce_value,然后赋给iterator_to
所指向的容器,但是,iterator_from_beg, iterator_from_end所指向的容器本身并不发生变化!!!
eg.
上面的运行结果说明:replace_copy从iterator_to的最后一个位置开始添加,而且添加的是更改后的值,而源容器元素本身不变!