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

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

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

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

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

在P336面就讲到:

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

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

在P338面下方:

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

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

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

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

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

1
2
3
4
 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.容器操作是基于容器的,因为容器是类,而容器操作即是容器的成员函数,故要用成员函数选择操作符指明是属于哪个容器。

 

 

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

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

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《【C++】何谓算法?何谓容器操作?》有2个想法

  1. 1.引用:” 何谓算法? 泛型算法:因为他们实现共同的操作,所以称之为“算法”;”

    依照我的理解,这儿Lippman重点要说明的是”泛型”,而非算法.

    2. 我觉得算法导论给出的定义更好: 算法就是一序列规定的操作,这个操作你给它一个或一序列输入,它给你一个或一序列输出.(当然,这并不是原话,我只记得这个大意).

    1. 嗯,学的越久,思考的也就不一样,现在再来看这篇文章,其实就那么一句话:
      算法考虑的是操作,而不是数据。就和你说的泛型一样。

发表评论

电子邮件地址不会被公开。 必填项已用*标注