C 學習筆記25 泛型演算法之寫入容器

2021-07-07 08:39:28 字數 3139 閱讀 6481

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_inserteris a convenience function template that constructs a 

std::back_insert_iterator

for the containercwith 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...