我目前看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