C++ primer plus 第16章string 类和标准模板库, 函数和容器方法
C++ primer plus 第16章string 类和标准模板库, 函数和容器方法
16.6.4 函数和容器方法
有时可以选择使用STL方法或STL函数。通常方法是更好的选择。首先,它更适合于特定的容器:其次,作为成员函数,它可以使用模板类的内存管理工具,从而在需要时调整容器的长度。例如,假设有一个由数字组成的链表,并要删除链表中某个特定值(例如4)的所有实例。如果la 是一个 list对象,则可以使用链表的remove()方法:
la.remove(4);//remove all 4s from the list调用该方法后,链表中所有值为4的元素都将被删除,同时链表的长度将被自动调整还有一个名为remove()的STL算法(见附录G),它不是由对象调用,而是接受区间参数。因此,如果 1b是一个 list对象,则调用该函数的代码如下:
remove(lb.begin(),lb.end(),4);
然而,由于该remove()函数不是成员,因此不能调整链表的长度。它将没被删除的元素放在链表的开始位置,并返回一个指向新的超尾值的迭代器。这样,便可以用该迭代器来修改容器的长度。例如,可以使用链表的 erase()方法来删除一个区间,该区间描述了链表中不再需要的部分。
程序清单 16.18 演示了这是如何进行的。
程序清单 16.18
// listrmv.cpp -- applying the STL to a string
#include <iostream>
#include <list>
#include <algorithm>
void Show(int);
const int LIM = 10;
int main