Tanky WooRSS

【C++】何谓算法?何谓容器操作?

27 Jun 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

这里讲的是根据《C++ Primer》第四版中文版的,没有书的朋友可以去网上搜搜,有很多。

在《C++ Primer》P345面有这么一句话:

算法不直接修改容器大小。如果需要添加或删除元素,则必须使用容器操作。

何谓算法?何谓容器操作?

在P336面就讲到:

泛型算法:因为他们实现共同的操作,所以称之为“算法”;

而“泛型”指的是它们可以操作在多种类型上------不但可作用于vector 或 list 这些标准库类型,还可作用于内置数组类型,甚至其它类型的序列上。

在P338面下方:

算法永不执行容器提供的操作。

算法是基于迭代器及其操作实现的,而并非基于容器操作。

使用“普通”的迭代器时,算法从不修改基础容器的大小。

标准库提供一种特殊的迭代器:插入器。插入器可以在基础容器上执行插入运算。

现在看P344面“1.去除重复”的代码:

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

分析:sort和unique是算法,而erase是容器操作。

细心的人可能发现了算法与容器操作的不同使用方式。

由此根据个人理解总结:

1.算法不是基于容器的,故不能用成员选择操作符“.”;

2.容器操作是基于容器的,因为容器是类,而容器操作即是容器的成员函数,故要用成员函数选择操作符指明是属于哪个容器。

 

 

以上纯属个人的一点拙见,也许很多地方表达的不标准,希望大家能理解就好。

因为自己在学的时候分不清算法与容器操作始终弄不清楚,总感觉都是个函数,没什么区别。直到看第二遍时当看到上面那个例子时才有了点清晰的认识,故写出来与大家一同分享。