这篇博客是从旧博客 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.容器操作是基于容器的,因为容器是类,而容器操作即是容器的成员函数,故要用成员函数选择操作符指明是属于哪个容器。
以上纯属个人的一点拙见,也许很多地方表达的不标准,希望大家能理解就好。
因为自己在学的时候分不清算法与容器操作始终弄不清楚,总感觉都是个函数,没什么区别。直到看第二遍时当看到上面那个例子时才有了点清晰的认识,故写出来与大家一同分享。