STL用法总结

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>

using namespace std;
using namespace std::placeholders;

int main()
{
	vector<int> ivec{ 3, 2, 1, 4, 5, 5, 2, 6 };
	vector<int> subivec{ 5, 2, 6 };
	vector<int> ivec2{ 1, 2, 4, 4, 4, 5, 6, 7 };
	vector<int> ivec3;
	vector<int> ivec4;

	auto it1 = find_if_not(ivec.begin(), ivec.end(), [](int c){ return c >= 3; });
	auto it2 = find_if_not(ivec.begin(), ivec.end(), bind2nd(greater_equal<int>(), 3));
	auto it3 = find_if_not(ivec.begin(), ivec.end(), bind(greater_equal<int>(),_1,3));
	//全部输出:2
	if (it1 != ivec.end())
		cout << *it1 << endl;
	if (it2 != ivec.end())
		cout << *it2 << endl;
	if (it3 != ivec.end())
		cout << *it3 << endl;

	cout << endl;

	//输出:0 1 0
	cout << all_of(ivec.begin(), ivec.end(), [](int c){ return c >= 3; }) << endl;
	cout << any_of(ivec.begin(), ivec.end(), [](int c){ return c >= 3; }) << endl;
	cout << none_of(ivec.begin(), ivec.end(), [](int c){ return c >= 3; }) << endl;

	cout << endl;
	
	auto it4 = adjacent_find(ivec.begin(), ivec.end());
	auto it5 = adjacent_find(ivec.begin(), ivec.end(), [](int a, int b){return a + 1 == b; });
	//输出:5 4
	if (it4 != ivec.end())
		cout << *it4 << endl;
	if (it5 != ivec.end())
		cout << *it5 << endl;

	cout << endl;

	auto it6 = search(ivec.begin(), ivec.end(), subivec.begin(), subivec.end());
	auto it7 = find_end(ivec.begin(), ivec.end(), subivec.begin(), subivec.end());
	auto it8 = find_first_of(ivec.begin(), ivec.end(), subivec.begin(), subivec.end());
	//输出:5 5 2
	if (it6 != ivec.end())
		cout << *it6 << endl;
	if (it7 != ivec.end())
		cout << *it7 << endl;
	if (it8 != ivec.end())
		cout << *it8 << endl;
	
	cout << endl;

	//输出:3, 2, 1, 4, 5, 5, 2, 6
	for_each(ivec.begin(), ivec.end(), [](int c){cout << c << " "; });
	cout << endl;
	//输出:3, 2, 1, 4, 5, 5, 2, 6
	copy(ivec.begin(), ivec.end(), ostream_iterator<int>(cout, " "));
	cout << endl;
	//输出:0
	cout << equal(ivec.begin(), ivec.end(), subivec.begin()) << endl;

	cout << endl;
	//必须是有序的!此时ivec2 = {1, 2, 4, 4, 4, 5, 6, 7 }
	
	auto it9 = lower_bound(ivec2.begin(), ivec2.end(), 3);
	auto it10 = upper_bound(ivec2.begin(), ivec2.end(), 3);
	auto it11 = equal_range(ivec2.begin(), ivec2.end(), 4);
	//输出:4 4
	if (it9 != ivec2.end())
		cout << *it9 << endl;
	if (it10 != ivec2.end())
		cout << *it10 << endl;
	//输出:3 3  注意在有序区间计算对象的个数优先采用distance方法
	cout << distance(it11.first, it11.second) << endl;
	cout << count(ivec2.begin(), ivec2.end(), 4) << endl;

	cout << endl;
	//输出:2 3 5 5 5 6 7 8  ivec3
	transform(ivec2.begin(), ivec2.end(), back_inserter(ivec3),[](int &c){return c + 1; });
	for_each(ivec3.begin(), ivec3.end(), [](int c){cout << c << " "; });
	cout << endl;
	//输出:2 6 20 20 20 30 42 56  ivec4
	transform(ivec2.begin(), ivec2.end(), ivec3.begin(), back_inserter(ivec4), multiplies<>());
	for_each(ivec4.begin(), ivec4.end(), [](int c){cout << c << " "; });
	cout << endl;
	merge(ivec3.begin(), ivec3.end(), ivec4.begin(), ivec4.end(), ostream_iterator<int>(cout, " "));
	cout << endl << endl;

	iter_swap(it4, it5);
	//输出:4 5
	cout << *it4 << endl << *it5 << endl;

	//此时ivec为3 2 1 5 4 5 2 6 
	//ivec2为1 2 4 4 4 5 6 7
	swap_ranges(it11.first, it11.second, it1);
	//输出:3 4 4 4 4 5 2 6
	for_each(ivec.begin(), ivec.end(), [](int c){cout << c << " "; });
	cout << endl;
	//输出:1 2 2 1 5 5 6 7 
	for_each(ivec2.begin(), ivec2.end(), [](int c){cout << c << " "; });
	cout << endl;

	//此时ivec4为 2 6 20 20 20 30 42 56
	replace_if(ivec4.begin(), ivec4.end(), bind(greater<int>(),_1,10), 0);
	//输出: 2 6 0 0 0 0 0 0 
	for_each(ivec4.begin(), ivec4.end(), [](int c){cout << c << " "; });
	cout << endl;
	//输出: 0 0 0 0 0 0 0 0 
	replace_if(ivec4.begin(), ivec4.end(), [](int c){return c > 0; }, 0);
	for_each(ivec4.begin(), ivec4.end(), [](int c){cout << c << " "; });
	cout << endl;
	return 0;
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <numeric>

using namespace std;
using namespace std::placeholders;

int main()
{
	vector<int> ivec{ 1, 2, 3, 4, 5, 6, 7, 8 };
	vector<int> ivec2{ 1, 2, 3, 4, 3, 2, 1 };
	//输出:2 4 6 8 1 3 5 7
	stable_partition(ivec.begin(), ivec.end(), [](int c){return c % 2 == 0; });
	for_each(ivec.begin(), ivec.end(), [](int c){cout << c << " "; });
	cout << endl;

	ivec = { 1, 2, 3, 4, 5, 6, 7, 8 };
	//输出:1
	cout << is_sorted(ivec.begin(), ivec.end()) << endl;
	//输出:3
	auto it = is_sorted_until(ivec2.begin(), ivec2.end());
	if (it != ivec2.end())
		cout << *it << endl;

	//只排序前4个元素
	partial_sort(ivec2.begin(), ivec2.begin() + 4, ivec2.end());
	//输出:1 1 2 2 4 3 3
	for_each(ivec2.begin(), ivec2.end(), [](int c){cout << c << " "; });
	cout << endl;

	//输出:2 2 4 3 3 3 1 1 
	rotate(ivec2.begin(), ivec2.begin() + 2, ivec2.end());
	for_each(ivec2.begin(), ivec2.end(), [](int c){cout << c << " "; });
	cout << endl;

	//输出: 1 1 3 3 3 4 2 2
	reverse(ivec2.begin(), ivec2.end());
	for_each(ivec2.begin(), ivec2.end(), [](int c){cout << c << " "; });
	cout << endl;

	//输出: Min:1 Max:4
	auto it3 = minmax_element(ivec2.begin(), ivec2.end());
	cout << "Min: " << *it3.first << endl << "Max: " << *it3.second << endl;

	//输出:10 11 12 13 14 15 16
	iota(ivec2.begin(), ivec2.end(), 10);
	for_each(ivec2.begin(), ivec2.end(), [](int c){cout << c << " "; });
	cout << endl;

	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值