C++ STL accumulate、equal、fill、fill_n、back_inserter、copy、replace、replace_copy、replace_if、swap等算法应用实例

#include <iostream>
#include <vector>
#include<numeric>
#include <string>
#include <iterator>
#include <algorithm>

using namespace std;

void main()
{
	vector<int> vec1;
	vector<string> vec2;
	vector<int> vec3;
	for (int i = 0; i < 10; i++)
	{
		vec1.push_back(i + 1);
		vec3.push_back(i);
	}

	//accumulate用来求和,第一个参数为起点,第二个参数为终点,第三个参数为起始和
	int sum = accumulate(vec1.begin(),vec1.end(),0);
	cout << sum << endl;

	vec2.push_back("a");
	vec2.push_back("b");
	vec2.push_back("c");
	vec2.push_back("d");
	//注意此处第三个参数需显示的创建string
	string str = accumulate(vec2.begin(), vec2.end(), string(""));
	cout << str << endl;

	//判断vec1和vec2是否相等
	bool flag = equal(vec1.cbegin(), vec1.cend(), vec3.cbegin());
	cout << flag << endl;

	//将每个元素都置为0(两个迭代器)
	fill(vec1.begin(), vec1.end(), 0);
	for (int i = 0; i < vec1.size(); i++)
	{
		cout << vec1[i] << "  ";
	}
	cout << endl;

	vector<int> vec4;//定义一个空的容器
	//back_inserter创建一个插入迭代器,向容器插入指定数量元素
	fill_n(back_inserter(vec4), 10, 1);//fill_n可以接受一个迭代器和指定计数值
	for (int i = 0; i < vec4.size(); i++)
	{
		cout << vec4[i] << "  ";
	}
	cout << endl;

	//拷贝算法,此算法接收三个迭代器,前两个表示输入范围,第三个表示目的序列的起始位置
	copy(vec3.begin(), vec3.end(), vec4.begin());
	for (int i = 0; i < vec4.size(); i++)
	{
		cout << vec4[i] << "  ";
	}
	cout << endl;

	//替代,前两个参数表示搜索范围,第三个参数为要搜索的值,第四个参数为新值
	replace(vec4.begin(), vec4.end(), 5, 0);//将5替换为0
	for (int i = 0; i < vec4.size(); i++)
	{
		cout << vec4[i] << "  ";
	}
	cout << endl;

	//将一个容器中的元素拷贝到另一容器中,并替换指定的值
	int arrInt[10] = {0,1,2,3,4,5,6,7,8,9};
	vector<int> vec5;//未初始化大小
	replace_copy(arrInt, arrInt+10, back_inserter(vec5), 9, 0);//将attInt中的9替换为0,并将全部元素拷贝到vec5
	for (int i = 0; i < vec5.size(); i++)
	{
		cout << vec5[i] << "  ";
	}
	cout << endl;

	system("pause");
}
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

void printV(vector<int> &vec)
{
	for (vector<int>::iterator it = vec.begin();it!=vec.end();it++)
	{
		cout << *it << "  ";
	}
}

bool Greate_Equal_3(int &n)
{
	return (n >= 3);
}
void replace_if_()
{
	vector<int> vec1;
	vec1.push_back(1);
	vec1.push_back(3);
	vec1.push_back(5);
	vec1.push_back(7);

	//replace_if:将容器内满足条件的元素替换(所有>=3的元素替换为1)
	replace_if(vec1.begin(), vec1.end(), Greate_Equal_3, 1);
	printV(vec1);
	cout << endl;
}

void swap_()
{
	vector<int> vec1;
	vec1.push_back(1);
	vec1.push_back(3);
	vec1.push_back(5);

	vector<int> vec2;
	vec2.push_back(2);
	vec2.push_back(4);
	vec2.push_back(6);

	//swap:替换两个容器内的元素
	swap(vec1, vec2);
	printV(vec1);
	cout << endl;
}

void main()
{
	replace_if_();
	swap_();

	system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值