template< class forwardit, class t >
void fill( forwardit first, forwardit last, const t& value );
效果:將[first, last)範圍內的每個元素都設為value.
template< class outputit, class size, class t >
void fill_n( outputit first, size count, const t& value ); // (until c++11)
template< class outputit, class size, class t >
outputit fill_n( outputit first, size count, const t& value ); // (since c++11)
效果:從first開始將count個元素的值設為value.
返回值:c++ 11之前,返回void
c++ 11之後,返回賦值的最後乙個元素的下乙個位置的迭代器,count為0時返回first
注意:fill_n總是假定容器足夠大,可以放下count個元素。但前面已經提到,演算法本身是不會改變容器大小的,所以fill_n函式不會為容器開闢空間。當容器不夠大時會發生執行時錯誤。最常見的出錯型別在乙個剛定義的空容器上呼叫fill_n:
vectorivec; //空容器
fill_n(ivec.begin(), 10, 0); // !!!error!
template< class inputit, class outputit >
outputit copy( inputit first, inputit last, outputit d_first );
效果:將[first, last)之間的元素copy到從d_first開始的元素中去。
類似於容器操作assign(b, e)
應該同樣需要小心目標容器的大小是否足夠容納要寫入的元素。
插入迭代器:可以給基礎容器新增元素的迭代器。
型別為:
std::back_insert_iterator
用迭代器給容器元素賦值時,被賦值的是迭代器所指向的元素。而使用插入迭代器時,則會在容器中新增乙個新元素。
標頭檔案:
#include
template< class container >
std::back_insert_iteratorback_inserter( container& c );
back_inserter
is a convenience function template that constructs a
std::back_insert_iterator
for the containerc
with the type deduced from the type of the argument.
back_inserter函式時迭代器介面卡,其實參是乙個容器的引用,返回乙個繫結在該容器上的插入迭代器。
當用這個迭代器給元素賦值時,賦值運算將呼叫push_back()在容器中新增元素。
所以可以聯合使用fill_n和back_inserter給空容器賦值:
vectorivec; //空容器
fill_n(back_inserter(ivec), 10, 0); //ok.向ivec中追加10個元素
也可以將copy與back_inserter聯合使用:
vectorivec;
listilist(10,1);
copy(ivec.begin(), ivec.end(), back_inserter(ivec));
template< class forwardit, class t >
void replace( forwardit first, forwardit last,
const t& old_value, const t& new_value );
template< class forwardit, class unarypredicate, class t >
void replace_if( forwardit first, forwardit last,
unarypredicate p, const t& new_value );
謂詞p的原型為:
bool
pred
(const
type &a
);效果:將[first, last)範圍內所有滿足條件的元素替換為
new_value
無謂詞的第乙個版本,將範圍內值為old_value的元素替換掉;
有謂詞的第二個版本,將範圍內使謂詞p返回true的元素替換掉。
template< class inputit, class outputit, class t >
outputit replace_copy( inputit first, inputit last, outputit d_first,
const t& old_value, const t& new_value );
template< class inputit, class outputit, class unarypredicate, class t >
outputit replace_copy_if( inputit first, inputit last, outputit d_first,
unarypredicate p, const t& new_value );
謂詞p的原型為:
bool
pred
(const
type &a
);效果:與replace類似,只是不改變原來的序列,將替換後的序列到存到從
d_first開始的容器中。
C 學習筆記之泛型演算法
先貼個 有時間的再補筆記 1 include2 using namespace std 34 模板類在接收了引數之後會將引數例項化5 自然可以接收 vector和 vector 67 templatevoid print t vec 列印該例項 813 cout 1516 templatevoid ...
C 學習筆記 泛型演算法
標準庫給容器定義了一些基本的操作,還定義了一組泛型演算法,稱它們為演算法,是因為它們實現了一些經典演算法的公共介面,如排序和搜尋,稱它們是泛型的,是因為它們可以用於不同型別的元素和多種容器型別,甚至包括內建陣列型別。泛型演算法通過迭代器來進行相應的操作,根據操作的不同,可以將泛型演算法分為唯讀演算法...
C 學習筆記之泛型
拆箱和裝箱從值型別轉換為引用型別為裝箱,把引用型別轉換為值型別為拆箱 裝箱和拆箱很容易使用,但是效能損失比較大,尤其是遍歷許多項的時候。list不使用物件,在使用時定義型別 var list new list list.add 44 no boxing int item list 0 mo unbo...