函式宣告:
template
< class inputit, class outputit, class unaryoperation >
outputit transform( inputit first1, inputit last1, outputit d_first,unaryoperation unary_op );
template
< class inputit1, class inputit2, class outputit, class binaryoperation >
outputit transform( inputit1 first1, inputit1 last1, inputit2 first2, outputit d_first, binaryoperation binary_op );
函式模板:
//第乙個形式:
template
outputit transform(inputit first1, inputit last1, outputit d_first, unaryoperation unary_op)
return d_first;
}//第二個形式:
template
outputit transform(inputit first1, inputit last1, inputit first2, outputit d_first, binaryoperation binary_op)
return d_first;
}
說明:
1. 第一種形式:對源區間的每個元素進行unary_op()操作,然後將結果寫入到目標區間,函式返回值為目標區間最後乙個元素的後面的位置。必須確保空間足夠,否則,需要使用插入型迭代器。
2. 第二種形式: 對於源區間dee每個元素,和對應的從first2開始的每個元素,呼叫函式binary_op(),然後將結果寫入到d_first開始的區間。第二源區間必須至少有和第乙個源區間一樣大的空間。
例子:
——————省略——————
void printitem(int elem)
bool op(int elem1,int elem2)
#include
int main()
; vector
vec2 = ;
vector
vec3;
//vec1中的元素乘以-1,vec3容量未確定,需要插入型迭代器,函式物件位於functional標頭檔案中
transform(vec1.begin(), vec1.end(), back_inserter(vec3), negate());
cout
<< "vec3: ";
for_each(vec3.begin(), vec3.end(), printitem);
cout
<< endl;
vec3.clear();
transform(vec1.begin(), vec1.end(), vec2.begin(), back_inserter(vec3), op);//選取兩個序列中大一點的數
cout
<< "vec3: ";
for_each(vec3.begin(), vec3.end(), printitem);
cout
<< endl;
}
輸出結果為:
vec3: -1 -2 -3 -4 -5 -6
vec3: 3 4 5 6 7 8
四 c 中的演算法 變動性演算法 賦值
stl提供了四個賦值函式 fill fill n generate generate n 說明 1.generate n 和fill n 只給指定區間前n個的那個數值賦值。2.fill 和fill n 用於給每個元素賦予相同的數值 3.generate 和generate n 在執行時呼叫函式的子程...
變動性演算法modifying algorithms
目的 變動內容 注意 目標區間不能是關聯式容器 所有具有單一目標區間的演算法,都返回最後乙個被複製元素的下乙個位置 一。複製 1.outputiterator copy inputiterator sourcebegin,inputiterator sourceend,outputiteratord...
stl演算法解析之非變動性演算法
函式 說明for each 對每個元素執行某操作 count 返回元素個數 count if 返回滿足某一準則 條件 的元素個數 min element 返回最小值元素 以迭代器表示 max element 返回最大值元素 以迭代器表示 find 搜尋等於某值的第乙個元素 find if 搜尋滿足某...