2014-07-07
3.1 指针的算术运算(The Arithmetic of Pointer)
Standard Template Library(STL)主要由两种组件构成:
- 一是容器(container),包括vector,list,set,map等类;
- 另一种是用以操作这些容器类的所谓泛型算法(generic algorithm),包括find(),sort(),replace(),merge()等等。
容器概述:
vector和list这两个容器是所谓的序列式容器(sequential container)。序列式容器会依次维护第一个元素、第二个元素......直到最后一个元素。我们在序列式容器上主要进行所谓的迭代(iterate)操作。
map和set这两种容器属于关联式容器(associative container)。关联式容器可以让我们快速寻找容器中的元素。
所谓map乃是一对对的key/value组合。key用于搜索,value要存储或取出数据。
所谓set,其中仅含有key。我们对它进行查询操作,为的是要判断某值是否存在其中。例如:我们想要建立一组索引表,用来记录新闻、故事中出现的字,我们希望一些中性字眼,如the,an,but排除掉。我们可以把这些中性字放在exclude_word的一个set中,每次放入某个字到索引表之前,查询一下exclude_word。若有,忽略;反之,加入。
泛型算法概述:
所谓泛型算法,提供了许多可施行于容器及数组型别上的操作行为。这些算法之所以称为泛型(generic),因为它们和它们所要操作的元素型别无关。
泛型算法是通过function template技术,达成“与操作对象之型别相互独立”的目的。
3.1 指针的算术运算(The Arithmetic of Pointer)
假设我们需要一个函数find()要完成以下任务。给定一个存储整数的vector,以及一个整数值。如果此值存在于vector内,返回一个指针指向该值;反之,返回0。
1 int *find(const vector<int>&vec, int value) 2 { 3 for(int ix=0;ix<vec.size();++ix) 4 if(vec[ix]==value) 5 retrun &vec[ix]; 6 return 0; 7 }