泛型学习笔记

Posted 才极

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型学习笔记相关的知识,希望对你有一定的参考价值。

文章目录

使用泛型算法

需要头文件algorithm

  1. find(_InIt _First, const _InIt _Last, const _Ty& _Val)用于搜索无序集合中是否存在某值。
  2. binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)用于搜索有序集合中是否存在某值。
  3. count(const _InIt _First, const _InIt _Last, const _Ty& _Val)返回数值相符的元素数目。
  4. max_element(_FwdIt _First, _FwdIt _Last)将一对泛型指针传入,返回范围内的最大值。
  5. copy(_InIt _First, _InIt _Last, _OutIt _Dest)接受两个泛型指针,标出复制范围,第三个泛型指针指向复制行为的目的地的第一个元素。
  6. sort(const _RanIt _First, const _RanIt _Last)接受两个泛型指针,对标出的范围进行排序。

设计泛型算法

Function Object(函数对象)

需要头文件functional
算术运算 pluse<type>…
关系运算 greater<type>…
逻辑运算 logical_and<type>…

Function Object Adapter(函数对象适配器)

Function Object Adapter是将函数对象的参数绑定至某个特定值。例如,less<type>期望外界传入两个值,每个值都必须和用户指定的元素进行比较。理想情况下,将less转化为一个一元运算符。这可以通过第二个参数绑定(bind)至用户指定的数值完成。这样less<type>会将每个元素拿出来一一与用户指定的值比较。
bind1st会将指定值绑定至第一操作数,bind2nd会将指定值绑定至第二操作数。

Map

Map被定义为一对数值,key通常是字符串,扮演者索引的角色,另一个数值是value。

#include<map>
map<type, type> words;

map的find()函数,如果key存在,find()函数会返回一个iterator,指向key/value形成一个pair,反之返回end()。
map的count()函数。会返回某特定项在map内的个数。

Set

set是由一组key值组成,所以set中的元素的值是唯一的。

#include<set>
#include<string>
set<string> word_exclusion;
while(cin >> tword)

	if(word_exclusion.count(tword))
		continue;
	words[tword]++;


Iterator Inserter

back_inserter()会以容器的push_back()取代assignment的作用:

vector result_vec;
unique_copy(ivec.begin(), ivec.end(), back_inserter(result_vec));

inserter()会以容器的insert()函数取代assignment运算符。inserter()会接收两个参数:容器、iterator:

vector svec_res;
unique_copy(svec.beign(), svec.end(), inserter(svec_res, svec_res.end()));

front_inserter()会以容器的push_front()函数取代assignment运算符。只适应于list 和 deque。

iostream Iterator

需要头文件iterator
标准库定义了有供输入输出使用的 iostream iterator类,称为istream_iterator和 ostream_iterator,分别支持单一类型的元素读取和写入。
案例
从标准输入设备读取一串string元素,将它们储存到vector内,并进行排序,最后再将这些字符串写回标准输出设备。

#include<iostream>
#include<iterator>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
int main()

	istream_iterator<string> is(cin);
	istream_iterator<string> eof;

	vector<string> text;
	copy(is, eof, back_inserter(text));

	sort(text.begin(), text.end());

	ostream_iterator<string> os(cout, " ");
	copy(text.begin(), text.end(), os);


如果是文件读写

#include<iostream>
#include<fstream>
#include<iterator>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
int main()

	ifstream in_file("a.txt");
	ofstream out_file("b.txt");

	if (!in_file || !out_file)
	
		cerr << "不能够打开这些文件" << endl;
		return -1;
	

	istream_iterator<string> is(in_file);
	istream_iterator<string> eof;

	vector<string> text;
	copy(is, eof, back_inserter(text));

	sort(text.begin(), text.end());

	ostream_iterator<string> os(out_file, " ");
	copy(text.begin(), text.end(), os);


以上是关于泛型学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter学习笔记2-原件作用域与执行顺序

iOS学习笔记(01) - 泛型

Java泛型学习笔记 - 泛型类

Java泛型学习笔记 - 泛型方法

Java泛型学习笔记 - 泛型接口

汇编入门学习笔记 —— 转移指令