转换元素

针对源区间[_First,_Last)中的每一个元素调用:_Func(elem)并将结果写到以_Dest起始的目标区间内
.返回目标区间内最后一个被复制元素的下一个位置,也就是第一个未被覆盖的元素的位置
调用者必须保证目标区间有足够空间,要不就得使用insert iterator
复杂度:线性,执行numElems次调用
下面是例子:
template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{for (int i = first; i <= last; ++i){coll.insert(coll.end(), i);}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{cout << optcstr;for (auto elem : coll){cout << elem << ' ';}cout << endl;}
int main()
{vector<int>a;list<int>b;INSERT_ELEMENTS(a, 1, 9);PRINT_ELEMENTS(a, "a: ");transform(a.cbegin(), a.cend(), a.begin(), negate<int>());PRINT_ELEMENTS(a, "negated: ");transform(a.cbegin(), a.cend(), back_inserter(b), bind(multiplies<int>(),_1,10));PRINT_ELEMENTS(b, "b: ");transform(b.crbegin(), b.crend(), ostream_iterator<int>(cout, " "), [](int elem) {return -elem; });cout << endl;}

将两序列的元素结合

针对源区间[_First,_Last)以及从_First2开始的第二源区间的对应元素,调用_Func(_First1Elem,_First2Elem)并将结果写入以_Dest起始的目标区内.
.返回目标区间内最后一个被复制元素的下一个位置,也就是第一个未被覆盖的元素的位置
调用者必须保证第二源区间有足够空间
调用者必须保证目标区间有足够空间,要不就得使用insert iterator
复杂度:线性,执行numElems次调用
例子:
int main()
{vector<int>a;list<int>b;INSERT_ELEMENTS(a, 1, 9);PRINT_ELEMENTS(a, "a: ");transform(a.cbegin(), a.cend(), a.cbegin(), a.begin(), multiplies<int>());PRINT_ELEMENTS(a, "squared: ");transform(a.cbegin(), a.cend(), a.crbegin(), back_inserter(b), plus<int>());PRINT_ELEMENTS(b, "b: ");cout << "diff: ";transform(a.cbegin(), a.cend(), b.crbegin(), ostream_iterator<int>(cout, " "), minus<int>());cout << endl;}
