我们经常对不同类型的容器做类似的操作。由此而生了通用算法。Qt实现了其中最常用的13个。
下面对列举这些通用算法:
(1)排序
qSort使用快速排序算法,将一个元素序列排成升序。
qStableSort也能完成类似的排序操作,但是能够确保值相等的元素在排序的前后相对顺序不变。
(2)搜索
对于有序容器,通用算法qBinaryFind使用二分搜索算法,在容器中快速搜索一个等于某个指定值的元素,返回一个指向该元素的迭代器。如果容器中有多个元素等于指定值,其中任何一个可能被返回。
qLowerBound和qUpperBound却具有更加确定的搜索结果。qLowerBound在一个元素序列中寻找第一个等于(或者大于)指定值的元素,返回一个指向该元素的迭代器。而qUpperBound在一个元素序列中寻找最后一个大于指定值的元素,返回指向该元素的一个迭代器。
无论容器是否有序,qFind在容器中逐个搜索与某个指定值相等的元素,并返回一个指向该元素的迭代器。
(3)修改容器的元素
qFill将一个元素序列中的每个元素设置为一个相同的值。
qCopy按照从前向后的顺序将一个元素序列复制到所在容器的其他位置或者另外一个容器中。
qCopyBackward按照从后向前的顺序完成类似的操作。
(4)其他
qCount计算某个值在容器中出现的次数。
qDeleteAll调用C++运算符delete,析构容器中的元素。
qEqual比较两个元素序列是否相等。
下面对列举这些通用算法:
(1)排序
qSort使用快速排序算法,将一个元素序列排成升序。
qStableSort也能完成类似的排序操作,但是能够确保值相等的元素在排序的前后相对顺序不变。
(2)搜索
对于有序容器,通用算法qBinaryFind使用二分搜索算法,在容器中快速搜索一个等于某个指定值的元素,返回一个指向该元素的迭代器。如果容器中有多个元素等于指定值,其中任何一个可能被返回。
qLowerBound和qUpperBound却具有更加确定的搜索结果。qLowerBound在一个元素序列中寻找第一个等于(或者大于)指定值的元素,返回一个指向该元素的迭代器。而qUpperBound在一个元素序列中寻找最后一个大于指定值的元素,返回指向该元素的一个迭代器。
无论容器是否有序,qFind在容器中逐个搜索与某个指定值相等的元素,并返回一个指向该元素的迭代器。
(3)修改容器的元素
qFill将一个元素序列中的每个元素设置为一个相同的值。
qCopy按照从前向后的顺序将一个元素序列复制到所在容器的其他位置或者另外一个容器中。
qCopyBackward按照从后向前的顺序完成类似的操作。
(4)其他
qCount计算某个值在容器中出现的次数。
qDeleteAll调用C++运算符delete,析构容器中的元素。
qEqual比较两个元素序列是否相等。