fill 和fill_n函數是C++ Primer第十二章泛型算法部份內容,並把它們稱爲生成和變異算法,也就是說這兩個函數只能對輸入範圍內已存在的元素進行操做。若是試圖對空容器進行fill_n操做,會致使嚴重的運行錯誤,因此在對元素進行寫入操做時要檢查目標的大小是否足以存儲要寫入的元素。算法
fill函數的做用是:將一個區間的元素都賦予val值。函數參數:fill(vec.begin(), vec.end(), val); val爲將要替換的值。函數
fill_n函數的做用是:參數包括 : 一個迭代器,一個計數器以及一個值。該函數從迭代器指向的元素開始,將指定數量的元素設置爲給定的值。
注意: 不能在沒有元素的空容器上調用fill_n函數,可是能夠經過下面的方法改進。spa
fill_n(vec.begin(),10,val);code
爲了保證算法有足夠的元素存儲輸出數據,咱們使用「插入迭代器」(insert iterator),插入迭代器是能夠給基礎容器添加元素的迭代器。blog
使用 back_inserter 的程序須要包含頭文件#include<iterator>,將上面的程序改寫成:it
1 #include <iterator> 2 vector<int> vec; //定義一個空容器 3 fill_n (back_inserter(vec), 10 val);
在這個程序中,fill_n() 函數每寫入一個值,都會經過back_inserter生產的插入迭代器實現。效果至關於在vec上調用push_back,在vec末尾添加10個元素。class