初识泛型算法

泛型算法不会执行容器操作,而是运行在迭代器上

#include<iostream>
#include<vector>
#include<numeric>
#include<iterator>
using namespace std;
int main() {
	/*
	*只读算法,最好使用cbegin()来操作迭代器
	*/
	vector<int> a1(10, -1);
	auto p1 = find(a1.cbegin(), a1.cend(), 3);//在两个迭代器范围内寻找3
	if (p1 == a1.end());//若无匹配元素,则返回第二个参数
	cout << "没有此元素" << endl;

	auto n1 = count(a1.cbegin(), a1.cend(), -1);//count用于统计-1在a1中出现次数
	cout << n1<<endl;

	cout << accumulate(a1.cbegin(), a1.cend(), 10) << endl;//计算元素和,第三个参数是和的初值
	//可通过此操作将字符串链接起来,因为string有定义+运算符

	vector<int>a2(20, -1);
	cout << equal(a1.cbegin(), a1.cend(), a2.cbegin()) << endl;//判断两序列是否相等,
	//元素不必一致,能运算==即可,比如string和const char*,默认假定第二个序列至少和第一个一样长
	//上式输出1,因为a1与在a2中对应的元素都相等


	/*
	*写容器算法,要保证容器原大小至少不小于要写的元素数目,!!!算法不执行容器操作,不可改变容器大小
	*/
	fill(a1.begin(), a1.end(), 1);//向给定输入序列写入数据
	fill_n(a1.begin(), 5, 2);//从第一个参数指定的元素开始,写入n(5)个值为2的元素
	//假定目的位置足够容纳要写入的元素数

	auto it = back_inserter(a1);//******保证算法有足够空间容纳输出数据****
	*it = 3;                     //通过次迭代器赋值会调用push_back
	cout << a1[a1.size() - 1] << endl;//输出3
	*it = 4;
	cout << a1[a1.size() - 1] << endl;//输出4
	fill_n(it, 3, 5);          //添加3个5
	cout << a1[a1.size() - 1] << endl <<a1[a1.size() - 2] << endl;//输出两个5

	auto p2=copy(a1.begin(), a1.end(), a2.begin());//将指定范围的元素拷贝到第三个参数表示的序列起始位置
	//目的序列必须包含至少与输入序列同样多的元素,p2是指向a2中拷贝的尾元素下一个位置的迭代器

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值