STL算法(18)-transform()

预定义的函数对象

negate<type>() equal_to<type>()

plus<type>() not_equal_to<type>()

minus<type>() less<type>()

multiplies<type>() greater<type>()

divides<type>() less_equal<type>()

modulus<type>() greater_equal<type>()

logical_not<type>() logical_and<type>()

logical_or<type>()

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

using namespace std;

int main()
{
	vector<int> ivec;
	list<int> ilist;

	for (int i = 1; i <= 9; i++)
		ivec.push_back(i);
	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
	{
		cout << *iter << ' ';
	}
	cout << endl;
	// negate 取负值  negate  预定义的函数对象
	transform(ivec.begin(), ivec.end(), ivec.begin(), negate<int>());

	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
	{
		cout << *iter << ' ';
	}
	cout << endl;

	// ilist  做变换的时候必须保证 ilist  有空间
	// back_inserter  加上头文件  #include<iterator>
	transform(ivec.begin(), ivec.end(), back_inserter(ilist),bind2nd(multiplies<int>(), 10));
	for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)
	{
		cout << *iter << ' ';
	}
	cout << endl;

	transform(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "), negate<int>());
	//
	system("pause");
	return 0;
}

第二种形式  融合数据

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
//
#include<iterator>
#include<functional>
using namespace std;

int main()
{
	vector<int> ivec;
	list<int> ilist;

	for (int i = 1; i <= 9; i++)
		ivec.push_back(i);
	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	transform(ivec.begin(), ivec.end(), ivec.begin(), ivec.begin(), multiplies<int>());

	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	// back_inserter  因为 ilist 是空的,所以我们要用插入迭代器
	transform(ivec.begin(), ivec.end(), ivec.begin(), back_inserter(ilist), plus<int>());

	for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	transform(ivec.begin(), ivec.end(), ilist.begin(), ostream_iterator<int>(cout, " "), minus<int>());

	//
	system("pause");
	return 0;
}

时间: 2024-10-13 23:57:31

STL算法(18)-transform()的相关文章

c++ 提高4 map容器 共性机制 使用时机 比较| STL算法 算法基础仿函数 谓词 函数适配器 遍历算法

[本文谢绝转载] <大纲> STL 容器 map 容器的4中初始化 遍历 map容器 元素的删除观测map.insert返回值,方法123,已存在就报错,初始化方法4会覆盖 map的查找,异常处理 map容器的range返回两个迭代器 multimap案例,按照部门_增删员工信息 容器共性机制 把对象放到容器中,会自动执行拷贝构造函数 各个容器的使用时机 vector与deque的比较: 算法 算法基础 函数对象(仿函数) 函数对象 与普通函数的区别:--  相同之处 函数对象 与普通函数的区

STL 算法[转 ]

STL 算法 STL算法概述 简介: STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包 含<numeric>,<functional>中则定义了一些模板类,用来声明函数对象 注意: 编译器无法检测出所传递的迭代器是一个无效形式的迭代器,当然也无法给出算法函数错误的提示,因为迭代器并不是真实的类别,它只是

STL源码剖析——STL算法stl_algo.h

前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法,本文剖析STL其他的算法,例如排序算法.合并算法.查找算法等等.在剖析的时候,会针对函数给出一些例子说明函数的使用.源码出自SGI STL中的<stl_algo.h>文件.注:本文的源码非常多,可能后续博文会对这些算法进行归类分析. STL算法剖析 #ifndef __SGI_STL_INTERNAL_ALGO_H #define __SGI_STL_INTERNAL_ALGO_H #include <stl_heap

【STL源码学习】STL算法学习之二

第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, class OutputIterator> OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result); 函数作用: 将[first,last)区间的元素拷贝至result开头的迭代器区间,并返回赋值

STL 算法

STL 算法(本文转自:http://www.cnblogs.com/kzloser/archive/2012/11/02/2751424.html) 阅读目录如下: STL算法概述查找算法堆算法关系算法集合算法排列组合算法排序和通用算法删除和替换算法生成和变异算法算数算法 STL算法概述 简介: STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorithm>

【转】STL算法 &lt;algorithm&gt;中各种算法解析

原文:http://blog.csdn.net/tianshuai1111/article/details/7674327 一,巡防算法 for_each(容器起始地址,容器结束地址,要执行的方法) #include <iostream> #include <algorithm> #include <vector> using namespace std; template<class T> struct plus2 { void operator()(T&

仿函数(函数对象)和STL算法

1仿函数可当作排序准则 程序员经常将某些class obect以有序的形式置于容器中或许你是 不能或不想反正你无法使用一般的operator<来对这些对象排序,你必须以某种特别规则通常基于某些成员函数此时仿函数派上用场例如: Class Person { Public: String firstname() const; String lastname() const; } Class personsortCriterion { Bool operator()(const Person& p

STL算法分类记忆

STL算法主要是我们强大的标准库中以迭代器或数值或函数对象为参数预先定义好的一系列算法操作. 在STL算法分类中首先要提的就是两个普遍存在的后缀: _if _copy 其中这两个后缀的作用分别是:一.对于_if,如果算法存在两种形式,参数的个数相同,其中一种形式的参数要求传递一个值,而另一种形式则会要求传递一个函数或仿函数(函数对象),那么则没有_if后缀的形式要求传递数值,有_if后缀的则要求传递函数.而且传递的函数一般都会是一个一元或二元的判别式.二._copy后缀则表示在此算法中元素在被复

C++标准模板库STL算法与自适应容器(栈和队列)

参考<21天学通C++>第23与第24章节,对STL算法与自适应容器进行介绍. 实际上在前面的STL顺序容器.关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数.而自适应容器是在顺序容器的基础上按照stack.queue的性质进行定制实现的.所以,本篇博文将言简意赅地总结出需要掌握的纲要. 一.STL算法 查找.搜索.删除.计数.排序等都是一些通用算法,STL通过模板函数提供了这些算法,可通过迭代器对容器进行操作.需要包含<algorithm>头文件. 1. find,f