一、泛型算法的概念及特点
泛型算法其实就是被与容器类型无关的、广泛使用的一种计算方法。使用是引用头文件algorithm
.
最常见的有: - 查找 - 重排元素(按一定规则排序) - 删除 - 替换
泛型算法特点如下: - 使用迭代器作为输入,使算法独立于操作对象 - 算法依赖于元素类型的操作
对于第二点,我们以find
为例子说明算法如何依赖于元素,只要元素支持判等符号,那么这个算法就能实现。已知支持判等(==)的元素类型有:int
double
string
。如果说,一个元素类型是C风格字符串char *,那就不能使用这个算法了,因为没有定义判等(==)操作。
附录A有详细说明,大致内容如下:
算法永远不会执行容器操作,它运行在迭代器上。也就是永远不会执行添加和删除元素。这样设计的原因: - 算法的通用性考虑。算法不直接操作容器元素,而是操作迭代器。对于不同数据类型就不需要重写算法了 - 迭代器的属性决定最终这个算法是只读还是可删可写
三、书中详细讲解的算法一般而言算法都是遍历整个(部分)容器,故前两参数一般都是指操作的对象集的范围。如:算法名称(vec.begin(),vec.end(),para1)
范围内查找容器中的某个元素: - 若存在指向该元素的迭代器; - 若不存在范围尾后迭代器vec.end()
例子:在vector ivec{1,2,3,4,5,6}
中查找元素7
和4
两个元素。
int main()
{
vector ivec{1,2,3,4,5,6};
auto result=find(ivec.begin(),ivec.end(),6);
if(result!=ivec.end())
cout
关注
打赏