我目前看STL库,我想知道为什么一个Vector类vector<string> names;
我要叫remove();
如下:为什么STL算法针对不同类别调用不同?
names.erase(remove(names.begin(), names.end(), "Simon"), names.end());
使用列表类list<string> names;
时,虽然我可以调用函数如下:
remove("Simon");
我也注意到了reverse();
同为vector<string> names;
它被称为如下:
reverse(names.begin(), names.end());
虽然list<string> names;
它被称为如下:
names.reverse();
是它更适合于随时拨打方式矢量会吗?为什么是这样?我对C++非常陌生,所以我很想知道做事情的最佳方式。
请参阅[list.sort和stl之间的区别是什么?](http://stackoverflow.com/questions/8017215/whats-the-difference-between-list-sort-and-stdsort)简而言之:当算法可以更有效地实现这些类时,这个算法可以访问类的内部,而不是通过单独提供的迭代器来处理。一般语法只授予对接口的访问权限。成员函数调用可以使用内部。 – jaggedSpire
*“我对C++非常陌生”*这解释了为什么您期望在C++中命名是合理的。 ;)另外两个有趣的位:'std :: remove_copy_if'不会删除任何东西,并且在'char'上调用'std :: toupper'可能调用UB。欢迎来到C++。 :) –
@ n.m。我知道,删除是为了在删除内部调用,我想知道为什么。即使我不在擦除内部调用,它仍然需要不同的格式。 – stuart194