stl algorithm example

#include <vector>
#include <algorithm>
#include <iostream>

bool divby5(int x)
{
	return x % 5 ? 0 : 1;
}

int square(const int x)
{
	return x*x;
}

void find_sample()
{
	int num_find = 6;
	std::vector<int> v1;
	for (int i=0; i<10; i++) {
		v1.push_back(2*i);
	}
	std::vector<int>::iterator result;
	result = find(v1.begin(), v1.end(), num_find);

	if (result == v1.end()) {
		std::cout << "not found: " << num_find << std::endl;
	} else {
		std::cout << "found: " << result-v1.begin() << std::endl;
	}
}

void find_if_sample()
{
	std::vector<int> v(20);
	for (int i=0; i<v.size(); i++) {
		v[i] = (i+1) * (i+3);
		std::cout << v[i] << std::endl;
	}

	int count_find = 15; 
	std::vector<int>::iterator ilocation;
	ilocation = find_if(v.begin(), v.end(), divby5);
	const int num_find = count(v.begin(), v.end(), count_find);
	if (ilocation != v.end()) {
		std::cout << "find num less than 5: " << *ilocation << " at: " << ilocation-v.begin() << std::endl;
		std::cout << "find count equal 15: " << num_find << std::endl;
		std::cout << "less than 5 num is: " << count_if(v.begin(), v.end(), divby5) << std::endl;
	}
}

void transform_sample()
{
	std::vector<int> v1(20), v2(20);
	for (int i=0; i<v1.size(); i++) {
		v1[i] = (i+1) * (i+3);
	}

	generate_n(v1.begin(), 15, rand);
	
	transform(v1.begin(), v1.end(), v2.begin(), square);
	unique(v1.begin(), v1.end());
	sort(v1.begin(), v1.end());

	std::vector<int>::iterator ti;
	for (ti=v2.begin(); ti!=v2.end(); ti++) {
		std::cout << *ti << std::endl;
	}
}

void sort_heap_sample()
{
	std::vector<int> v1(20), v2(20);
	for (int i=v1.size(); i>0; i--) {
		v1[i] = (i+1) * (i+3);
	}

	make_heap(v1.begin(), v1.end());
	sort_heap(v1.begin(), v1.end());

	for (int i=0; i<v1.size(); i++) {
		std::cout << v1[i] << std::endl;	
	}
}

int main(int argc, char** argv)
{
	find_sample();
        find_if_sample();
	transform_sample();
	sort_heap_sample();
		
	return 0;
}
posted @ 2015-04-15 15:42  Lcnoctave  阅读(153)  评论(0编辑  收藏  举报