c++ primer(第五版)笔记 第十章 泛型算法(1)

本文介绍C++标准库中的泛型算法应用,包括查找、累加、替换等操作,并展示了如何利用这些算法进行容器元素处理及排序。通过具体实例说明了泛型算法的灵活性与高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 泛型算法(generic algorithm),大部分定义在 algorithm.h 中,numeric.h 定义了一组数值泛型算法
	// 1>访问序列中首元素
	// 2>元素运算
	// 3>满足条件,返回结果
	// 4>否则继续查找
	// 5>到达序列尾,停止
	// 6>返回未找到的值,类型同3一样
	
	// 除步骤2外,都可以使用迭代器操作,所以不依赖容器
	// 但步骤2的操作需要元素类型的支持
	
	// 算法永远不会执行容器操作,可能改变元素的值或顺序,但不会直接添加删除元素,不会改变容器的大小

// 只读算法
	// 在指定容器迭代器范围内查找 val,返回指向 val 的迭代器或尾后迭代器
	// find(range, val)

	// sum 为和的初值,将指定容器迭代器范围内的元素进行 + 运算,然后和 sum + 运算,容器的元素必须能转换为 sum 的类型
	// accumulate(range, sum)	
	
	// 将指定容器c1 迭代器范围内的元素,依次和 c2 对位的元素进行 == 运算
	// c2 仅指定首元素,所以要保证 c2 的元素个数大于等于 c1 指定范围的元素个数所有类似算法都有此类要求
	// equal(c1.range, c2.cbegin())
	
// 写容器操作,容器的大小必须大于等于算法要求写入的元素数量,算法不执行容器操作,自身不会改变容器大小
	// 将 val 赋给指定的迭代器范围内的元素
	// fill(range, val)
	
	// 将 val 赋给指定的迭代器 iter 开始后 n 个元素,容器从 iter 元素开始至少有 n 个元素
	// fill_n(iter, n, val)
	
	//返回容器的插入迭代器(insert iterator),通过插入迭代器可以将赋值符号右侧的值添加到容器中
	// auto i = back_inserter(c);
	// *i = 24;
	// fill_n(back_inserter(c), 10, 0);	向 c 添加10个0
	
	// 将指定容器c1 迭代器范围内的元素,拷贝到 c2,同样需要保证 c2 的容量
	// copy(range, c2.cbegin());
	
	// 在指定容器迭代器范围内查找 res,然后全部替换为 des
	// replace(range, res, des)
	
	// 拷贝指定容器迭代器范围内的元素到 c2,并将 c2中的 res,全部替换为 des
	// replace(range, c2.begin(), res, des)
	
// 容器排序
	// 重新排序指定范围的元素,默认 < 运算,也可以指定函数或对象指定规则
	// sort(range)
	// sort(range,pfunc)

#include<iostream>
#include<numeric>
#include<vector>
#include<algorithm>
using std::cout;
using std::cin;
using std::endl;
using std::vector;
	
void practice_10_4();
void sort_unique();
int main()
{
	practice_10_4();
	sort_unique();
}

void practice_10_4()
{
	vector<double> vd{234.0,4234,234.345,234.52};
	int sum = accumulate(vd.cbegin(), vd.cend(), 0);
	cout << sum << endl;
}
bool myfunction (int i,int j) { return (i>j); }
void sort_unique()
{
	vector<int> vi{1,43,42,823,3,2,43,823,345,8534,234,234};
	sort(vi.begin(), vi.end(),myfunction);
	for(auto n : vi)
		cout << "after_sort: " << n << endl;
	auto end_unique = unique(vi.begin(), vi.end());
	for(auto n : vi)
		cout << "after_unique: " << n << endl;
	vi.erase(end_unique, vi.end());
	for(auto n : vi)
		cout << "after_erase: " << n << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值