技术开发 频道

泛型算法

 三、对容器元素重新排序的算法

 1、unique 算法带有两个指定元素范围的迭代器参数。该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器,表示无重复的值范围的结束。

 // sort words alphabetically so we can find the duplicates

 //words:the quick red fox jumps over the slow red turtle

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

 vector<string>::iterator end_unique = unique(words.begin(), words.end());

 words.erase(end_unique, words.end());

 2、如果要删除重复的项,必须使用容器操作,在本例中调用 erase 实现该功能。这个函数调用从 end_unique 指向的元素开始删除,直到 words 的最后一个元素也删除掉为止。

 3、sort和stable_sort 算法,,stable_sort 保留相等元素的原始相对位置。sort 和 stable_sort 都是重载函数。其中一个版本使用元素类型提供的小于(<)操作符实现比较。在查找重复元素之前,我们就是用这个 sort 版本对元素排序。第二个重载版本带有第三个形参:比较元素所使用的谓词函数的名字。这个谓词函数必须接受两个实参,实参的类型必须与元素类型相同,并返回一个可用作条件检测的值。

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

 // sort words by size, but maintain alphabetic order for words of the same size

 stable_sort(words.begin(), words.end(), isShorter);

  4、统计满足指定条件的项数。执行 count_if 时,首先读取它的头两个实参所标记的范围内的元素。每读出一个元素,就将它传递给第三个实参表示的谓词函数。此谓词函数。此谓词函数需要单个元素类型的实参,并返回一个可用作条件检测的值。count_if 算法返回使谓词函数返回条件成立的元素个数。

 //GT6 returns a bool value

 vector<string>::size_type wc = count_if(words.begin(), words.end(), GT6);

0
相关文章