栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++STL算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++STL算法

目录

查找算法

排序算法

删除算法


查找算法

基本查找

    find:区间查找find_if:条件查找find_first_of:查找区间第一次出现的值adjacent_find:查找区间第一次重复的值search:子序列查找search_n:子序列查找出现次数

统计查找

    count:区间统计count_if:条件统计个数equal:比较

有序查找

    binary_search:二分查找upper_bound:查找最后一个大于查找的值lower_bound:查找大于等于查找的值equal_range:区间比较...有序序列
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    int main() {
    	   //  find:区间查找
    	vectorvec= { 1,2,3,4,5,6,7,8,9 };
    	auto F = find(vec.begin(), vec.end(), 9);//找自定义类型需要重载运算符
    	//没找到:结束位置
    	if (F != vec.end()) 
    	{
    		cout << *F << endl;
    	}
    		//find_if:条件查找
    	auto pre = find_if(vec.begin(), vec.end(), [](int a) {return a > 3; });
    	cout << *pre << endl;
    		//find_first_of:查找区间第一次出现的值
    	int array[] = { 44,1,2 };
    	//vec.begin() vec.end()拿出一个元素跟temp temp+2 比较,满足就返回 
    	auto ffo = find_first_of(vec.begin(), vec.end(), array, array + 2);
    	cout << *ffo << endl;
    		//adjacent_find:查找区间第一次重复的值
    	int rever[]= { 1,1,2,2,3,4,5 };
    	auto af = adjacent_find(rever, rever+7);
    	cout << *af << endl;
    		//search:子序列查找
    	int fans[] = { 1,1,2 };
    	auto S = search(af, af + 7, fans, fans + 3);
    	cout << *S << endl;//输出满足序列的第一个元素
    		//search_n:子序列查找出现次数
    	auto sn = search_n(fans, fans + 3, 2, 1);
    	cout << *sn << endl;
    	sn = search_n(rever, rever + 7, 3, 2, [](int a, int b) {return a > b; });
    	cout << *sn << endl;
    		//count:区间统计
    	cout << count(rever, rever + 7, 1) << endl;;
    		//count_if:条件统计个数
    	cout << count_if(rever, rever + 7, [](int x) {return x > 1; })< 

排序算法

merge:归并排序,存于新容器inplace_merge:归并排序,覆盖原区间sort:排序,更改原容器排序stable_sort:排序,保存原容器顺序排序nth_element:关键字排序partition:范围排序partial_sort:范围排序partial_sort_copy:局部排序,结果另存stable_partition:范围排序,保存原容器排序random_shuffle:随机排序reverse:逆序原容器reverse:逆序容器到新容器rotate:移动元素到容器末尾rotate_copy:移动元素到新容器

#include
#include
#include
#include
#include
#include
using namespace std;
template
void print(_Ty data) 
{
	for (auto v : data)
	{
		cout << v << "  ";
	}
	cout << endl;
}
class Mouse {
public:
	string getName() 
	{
		return name;
	}
	int getAge() 
	{
		return age;
    }
	void print() {
		cout << name << "  " << age << endl;
	}
Mouse(string name,int age):name(name),age(age){}
protected:
	string name;;
	int age;
};
void testUserData() {
	vectorMickey;
	Mickey.push_back(Mouse("abc", 12));
	Mickey.push_back(Mouse("cad", 56));
	Mickey.push_back(Mouse("hjk", 23));
	sort(Mickey.begin(), Mickey.end(), [](auto a, auto b) {return a.getName() > b.getName(); });
	for (auto v : Mickey) {
		v.print();
	}
}
bool compare(double a,double b) {
	return (int)avec = { 1.33,2.33,1.22,3.22,3.55,4.22 };
//stable_sort:排序,保存原容器顺序排序
	stable_sort(vec.begin(), vec.end(), compare);
	print(vec);
	//stable_partition:范围排序,保存原容器相对排序
	stable_partition(vec.begin(), vec.end(), bind(compare,std::placeholders::_1,2.0));
	print(vec);
}
void testMerge() {
	vectorvec = { 1,2,3,4,5,0,6,7,8,9 };
	vectorresult(vec.size());
 //merge:归并排序,存于新容器
	merge(vec.begin(), vec.begin() + 5, vec.begin() + 5,vec.end(), result.begin());
	print(vec);
//inplace_merge:归并排序,覆盖原区间
	inplace_merge(vec.begin(), vec.begin() + 5, vec.end());
	print(vec);
}
int main() {
	testMerge();
	testUserData();	
	testStableSort(); 	
		//sort:排序,更改原容器排序
	vectorvec = { 1,2,3,4,1,2,3,5 };
	sort(vec.begin(), vec.end());
	sort(vec.begin(), vec.end(),less());
		print(vec);
		sort(vec.begin(), vec.end(), greater());
		print(vec); 
		//nth_element:关键字排序
		vectortest = { 1,2,3,4,5,0,6,7,8,9 };
		nth_element(test.begin(), test.begin() + 5, test.end());
		print(test);
		//partition:分类处理,通过子函数描述条件,返回true放左边,返回false放右边
		vectorscore = { 98,97,95,20,56,43 };
		partition(score.begin(), score.end(), [](int a) {return a > 60; });
		print(score);
		//partial_sort:范围排序
		partial_sort(score.begin(), score.begin() + 3, score.end());
		print(score);
		//partial_sort_copy:局部排序,结果另存
		vectorresult(5);
		partial_sort_copy(vec.begin(), vec.begin() + 5, result.begin(), result.end());
		print(result);
		//random_shuffle:随机排序
		srand((unsigned int)time(nullptr));
		random_shuffle(vec.begin(), vec.end());
		print(vec);
		//reverse:逆序原容器
		reverse(vec.begin(), vec.end());
		print(vec);
		//reverse:逆序容器到新容器
		vectorre(vec.size());
		reverse_copy(vec.begin(), vec.end(), re.begin());
		print(re);
		//rotate:移动元素到容器末尾
		vectorrome = { 1,35,5,6,3 };
		rotate(rome.begin(), rome.begin() + 2, rome.end());
		print(rome);
		//rotate_copy:移动元素到新容器
		vectormResult(rome.size());
		rotate_copy(rome.begin(), rome.begin() + 3, rome.end(), mResult.begin());
		print(mResult);
	return 0;
}

删除算法

copy:拷贝函数copy_backward:逆序拷贝iter_swap:交换remove:删除remove_copy:删除元素复制到新容器remove_if:条件删除remove_copy_if:条件删除拷贝到新容器replace:替换replace_copy:替换结果放新容器replace_if:条件替换replace_copy_if:条件替换,结果另存swap:交换swap_ranges:区间交换unique:去重unique_copy:去重结果另存

#include
#include
#include
#include
#include
#include
using namespace std;
template
void print(_Ty data)
{
	for (auto v : data)
	{
		cout << v << "  ";
	}
	cout << endl;
}
int main() {
	//正向拷贝
	vectorvec = { 1,2,3,4,5,6 };
	vectorrenc(vec.size());
	copy(vec.begin(), vec.end(), renc.begin());
	print(renc);
	//逆向拷贝,从最后开始赋值
	vectorrvec(vec.size());
	copy_backward(vec.begin(), vec.end(), rvec.end());
	print(rvec);
	//删除-->伪删除
	auto iter = remove(vec.begin(), vec.end(), 3);
	cout << vec.size() << endl;
	print(vec);
	//伪删除,结果另存
	vectorresult(vec.size());
	remove_copy(vec.begin(), vec.end(), result.begin(), 2);
	print(result);
	//条件删除,remove_if
	vectorscore = { 98,65,87,32,56 };
	remove_if(score.begin(), score.end(), [](int x) {return x < 60; });
	print(score);
	//条件删除,结果另存
	vectorIU(count_if(score.begin(), score.end(), [](int x) {return x > 60; }));
	remove_copy_if(score.begin(), score.end(), IU.begin(), [](int x) {return x < 60; });
	print(IU);
	//替换算法(修改)replace
	vectorrep = { 1,2,3,4,5,1,6,1,4,8 };
	replace(rep.begin(), rep.end(), 1, 100);
	print(rep);
	//替换后结果另存
	vectorrecp(rep.size());
	replace_copy(rep.begin(), rep.end(), recp.begin(), 100, 0);
	print(recp);
//条件交换
	replace_if(rep.begin(), rep.end(), [](int x) {return x < 6; }, 0);
	print(rep);
	//条件替换,结果另存
	vectorrepif(rep.size());
	replace_copy_if(rep.begin(), rep.end(), repif.begin(), [](int x) {return x == 0; },1);
	print(repif);
	//交换iter_swap
	vectortest = { 1,2,34,5,6,6 };
	iter_swap(test.begin(), test.end() - 1);
	print(test);
	//swap不需要两个容器长度一样
	vectortest1 = { 2,2 };
	swap(test, test1);
	print(test1);
	print(test);
	//区间交换swap_ranges
	swap_ranges(test1.begin(), test1.begin() + 1, test.begin());
	print(test1);
	//去重(连续相同的只保留一个)
	vectoruniq = { 1,1,3,3,4,4,5,66,7 };
	
	print(uniq);
	//去重另存
	vectoruniqr(6);
	unique_copy(uniq.begin(), uniq.end(), uniqr.begin());
	print(uniqr);
		return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号