当前位置:首页 > 编程笔记 > 正文
已解决

STL排序、拷贝和替换算法

来自网友在路上 145845提问 提问时间:2023-09-27 11:53:00阅读次数: 45

最佳答案 问答题库458位专家为你答疑解惑

目录

常用排序算法sort

常用排序算法random_shuffle

常用排序算法merge

常用排序算法reverse

常用拷贝和替换算法copy

常用拷贝和替换算法replace

常用拷贝和替换算法replace_if

常用拷贝和替换算法swap


常用排序算法sort

sort(iterator begp iterator end,_Pred);
// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
// beg开始选代器
//end结束选代器
//_Pred 谓词

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}void test01()
{vector<int>v;v.push_back(20);v.push_back(70);v.push_back(60);v.push_back(50);v.push_back(90);v.push_back(10);sort(v.begin(),v.end());//默认升序for_each(v.begin(),v.end(),myprint);cout << endl;sort(v.begin(),v.end(),greater<int>());//降序for_each(v.begin(),v.end(),myprint);cout << endl;
}int main()
{test01();return 0;
}

常用排序算法random_shuffle

random_shuffle(iterator beg, iterator end);
//指定范围内的元素随机调整次序
// beg开始选代器
//end结束迭代器

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}void test01()
{vector<int>v;for(int i =0;i<10;i++){v.push_back(i);}random_shuffle(v.begin(),v.end());for_each(v.begin(),v.end(),myprint);cout << endl;}int main()
{test01();return 0;
}

编译运行

常用排序算法merge

merge(iterator begl, iterator end1, iterator beg2, iterator end2, iterator dest);// 容器元素合并,并存储到另一容器中
/注意:两个容器必须是有序的
// beg1容器1开始迭代器
//end1 容器1结束选代器
//beg2容器2开始选代器
// end2容器2结束迭代器
// dest目标容器开始迭代器

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}void test01()
{vector<int>v;	vector<int>v2;for(int i =0;i<10;i++){v.push_back(i);v2.pish_back(i+1);}vector<int>v3;//开辟空间v3.resize(v2.size()+v.size());merge(v.begin(),v.end(),v2.begin(),v2.end(),v3.begin());//0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10for_each(v3.begin(),v3.end(),myprint);cout << endl;
}int main()
{test01();return 0;
}

常用排序算法reverse

reverse(iterator beg, iterator end);
// 反转指定范围的元素
// beg开始选代器
// end结束选代器

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}void test01()
{vector<int>v;	for(int i =0;i<10;i++){v.push_back(i);}cout << "反转前:" << endl;for_each(v.begin(),v.end(),myprint);cout << endl;reverse(v.begin(),v.end());cout << "反转后:" << endl;for_each(v.begin(),v.end(),myprint);cout << endl;
}int main()
{test01();return 0;
}

编译运行

常用拷贝和替换算法copy

 copy(iterator beg, iterator end, iterator dest);
// beg开始选代器
//end 结束选代器
//dest目标起始选代器

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}void test01()
{vector<int>v;	for(int i =0;i<10;i++){v.push_back(i);}	vector<int>v2;//给目标容器开辟空间v2.resize(v.size());copy(v.begin(),v.end(),v2.begin());//0 1 2 3 4 5 6 7 8 9 for_each(v2.begin(),v2.end(),myprint);cout << endl;
}int main()
{test01();return 0;
}

常用拷贝和替换算法replace

replace(iterator beg,iterator end,oldvalue ,newvalue);
//将区间内旧元素督换成新元素
//beg开始选代器
//end结束选代器
// oldvalue 旧元素
//newvalue 新元素

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}void test01()
{vector<int>v;	for(int i =0;i<10;i++){v.push_back(i);}replace(v.begin(),v.end(),2,3);//0 1 3 3 4 5 6 7 8 9 for_each(v.begin(),v.end(),myprint);cout << endl;
}int main()
{test01();return 0;
}

常用拷贝和替换算法replace_if

replace if(iterator beg, iterator end,pred, newvalue);
// 按条件替换元素,满足条件的替换成指定元素
// beg开始选伦器
//end结束选代器
//_pred谓词
// newvalue 替换的新元素

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}class predicate
{
public:bool operator()(int val){return val >= 5;}
};void test01()
{vector<int>v;	for(int i =0;i<10;i++){v.push_back(i);}//如果大于等于五 替换成四replace_if(v.begin(),v.end(),predicate(),4);//0 1 2 3 4 4 4 4 4 4 for_each(v.begin(),v.end(),myprint);cout << endl;
}int main()
{test01();return 0;
}

常用拷贝和替换算法swap

swap(container c1, container c2);
// 互换两个客器的元素
// c1容器1
// c2容器2

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include<functional>using namespace std;void myprint(int t)
{cout << t << " ";
}void test01()
{vector<int>v1;		vector<int>v2;	for(int i =0;i<10;i++){v1.push_back(i);v2.push_back(i+100);}cout << "互换前" << endl;for_each(v1.begin(),v1.end(),myprint);	cout << endl;for_each(v2.begin(),v2.end(),myprint);cout << endl;swap(v1,v2);cout << "互换后" << endl;for_each(v1.begin(),v1.end(),myprint);	cout << endl;for_each(v2.begin(),v2.end(),myprint);cout << endl;
}int main()
{test01();return 0;
}

编译运行

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"STL排序、拷贝和替换算法":http://eshow365.cn/6-14646-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!