replace_if : 将指定范围内所有操作结果为true的元素用新值替换。
//把大于等于3的元素替换成8 vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIntA.push_back(3); vecIntA.push_back(9); replace_if(vecIntA.begin(), vecIntA.end(), GreaterThree, 8); // GreaterThree的定义在上面。 swap()swap: 交换两个容器的元素
vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vector<int> vecIntB; vecIntB.push_back(2); vecIntB.push_back(4); swap(vecIntA, vecIntB); //交换 四、常用的算术和生成算法 accumulate()accumulate: 对指定范围内的元素求和,然后结果再加上一个由val指定的初始值。
include<numeric> vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIntA.push_back(7); vecIntA.push_back(9); int iSum = accumulate(vecIntA.begin(), vecIntA.end(), 100); //iSum==125 fill()fill: 将输入值赋给标志范围内的所有元素。
vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIntA.push_back(7); vecIntA.push_back(9); fill(vecIntA.begin(), vecIntA.end(), 8); //8, 8, 8, 8, 8 五、常用的集合算法 set_union(),set_intersection(),set_difference()set_union: 构造一个有序序列,包含两个有序序列的并集。
set_intersection: 构造一个有序序列,包含两个有序序列的交集。
set_difference: 构造一个有序序列,该序列保留第一个有序序列中存在而第二个有序序列中不存在的元素。
vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIntA.push_back(7); vecIntA.push_back(9); vector<int> vecIntB; vecIntB.push_back(1); vecIntB.push_back(3); vecIntB.push_back(5); vecIntB.push_back(6); vecIntB.push_back(8); vector<int> vecIntC; vecIntC.resize(10); //并集 set_union(vecIntA.begin(), vecIntA.end(), vecIntB.begin(), vecIntB.end(), vecIntC.begin()); //vecIntC : {1,3,5,6,7,8,9,0,0,0} //交集 fill(vecIntC.begin(),vecIntC.end(),0); set_intersection(vecIntA.begin(), vecIntA.end(), vecIntB.begin(), vecIntB.end(), vecIntC.begin()); //vecIntC: {1,3,5,0,0,0,0,0,0,0} //差集 fill(vecIntC.begin(),vecIntC.end(),0); set_difference(vecIntA.begin(), vecIntA.end(), vecIntB.begin(), vecIntB.end(), vecIntC.begin()); //vecIntC: {7,9,0,0,0,0,0,0,0,0} 六、常用的遍历算法 for_each() /* 遍历算法 遍历容器元素 @param beg 开始迭代器 @param end 结束迭代器 @param _callback 函数回调或者函数对象 @return 函数对象 */ for_each(iterator beg, iterator end, _callback);for_each: 用指定函数依次对指定范围内所有元素进行迭代访问。该函数不得修改序列中的元素。
void show(const int &iItem){ cout << iItem; } main() { int iArray[] = {0,1,2,3,4}; vector<int> vecInt(iArray,iArray+sizeof(iArray)/sizeof(iArray[0])); for_each(vecInt.begin(), vecInt.end(), show); //结果打印出0 1 2 3 4 } transform() /* transform算法 将指定容器区间元素搬运到另一容器中 注意 : transform 不会给目标容器分配内存,所以需要我们提前分配好内存 @param beg1 源容器开始迭代器 @param end1 源容器结束迭代器 @param beg2 目标容器开始迭代器 @param _cakkback 回调函数或者函数对象 @return 返回目标容器迭代器 */ transform(iterator beg1, iterator end1, iterator beg2, _callbakc)transform: 与for_each类似,遍历所有元素,但可对容器的元素进行修改
int increase (int i){ return i+1; } main() { vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIntA.push_back(7); vecIntA.push_back(9); transform(vecIntA.begin(),vecIntA.end(),vecIntA.begin(),increase); //vecIntA : {2,4,6,8,10} }