Essential C++ 第3章 泛型编程风格
  TEZNKK3IfmPf 2023年11月12日 52 0
C++

第3章 泛型编程风格

Standard Template Library(STL)主要由两种组件构成:一是容器,包括vector、List、set、map等,另一种是操作这些容器的泛型算法(generic algorithm),包括find()、sort()、replace()等。

 

vector和list是顺序性容器,主要进行迭代操作。

map和set属于关联容器,可以用来快速查找容器中的元素值。

map是一对对的key/value组合。

set只有key。

 

泛型算法通过function template 技术,达到’与操作对象的类型相互独立’的目的。

 

 

3.1 指针的算术运算

3.2 了解Iterator(泛型指针)

3.3所有容器的共通操作:

 

1、 == 和 !=

2、 =

3、empty()  \\容器为空时返回true

4、size()   \\ 容器内的元素个数

5、clear()      \\ 清空容器

 

每个容器都提供了begin()和end()函数,指向元素的第一个元素和最后一个元素下一位置的iterator;

insert() 插入一个或一个范围的的元素

erase() 删除某个或某个范围的元素

 

3.4 使用顺序性容器

使用顺序性容器,首先要包含相应的头文件:

#include<vector>

#include<list>

#include<deque>

 

产生顺序性容器的方式有五种:

1、产生空的容器

list<string> slist;

vector<int> ivec;

2.产生特定大小的容器, 其中元素以默认值作为初值

list<int> ilist(1024);

vector<string> svec(32);

3、产生特定大小的容器,且为每个元素指定初值

vector<int> ivec(10,-1);

4、通过一对iterator产生容器

int ia[8] = {1,1,2,3,4,5,8,13,21};

vector<int> fib(ia,ia+8);

5、根据某个容器产生

list<string> slist;

//填充slist

list<string> slist2(slist);//将slist复制给slist2

 

 

在容器末尾插入:push_back()

在容器某位删除:pop_back()

front()读取最前的值

back()返回最末尾的值

 

3.5 使用泛型算法

首先包含头文件

#include<algorithm>

 

四个泛型搜索算法:

find():搜索无序集合中是否包含某值

binary_search() 二分搜索,用于有序集合的搜索。

count() 返回数值相符的元素个数。

search() 查找某个容器内是否存在某个子序列。如果有,则返回指向子序列起始处的itrator,              否则返回容器末尾。

 

3.6 如何设计一个泛型算法

 

 

Function Object

所谓function object,是某种class的实例对象,这类对象对function call运算符做了重载操作,如此一来就可以使function object 当成一般函数来使用。

 

function object adapter会对function object 进行修改操作。所谓bind adapter会将function object 的参数绑定至特定值。

 

3.7 使用Map

map被定义为一对数值。

建立map:

#include<map>

#include<string>

map<string,key> words;

输入key/value对:

 

words[“Vermeer”] = 1;

first,second: map对象的两个成员,first对应key,second对应value。

 

查询某个key是否在map中:

words.find(“Vermeer”); 如果在,则返回一个iterator,指向key/value的一个pair

否则返回end();

it = words.find(“Vermeer”);

if(it!=words.end())

  count = it->second;

3.8 使用Set

Set是一群key组合而成的。

#include<set>

#include<string>

set<string>word_exclusion;

对于任何key,set只存一份。

为set加入元素

iset.insert(ival);

iset.insert(ver.begin().ver.end());

3.9 如何使用Iterator Inserter

3.10 使用iostream iterator

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   23天前   36   0   0 C++
  TEZNKK3IfmPf   23天前   25   0   0 指针C++
  TEZNKK3IfmPf   2024年05月31日   24   0   0 算法C++
TEZNKK3IfmPf