首先,你这个 vector<T> 是自己写的,还是C++标准库中的?
若是标准库中的,根本就没有这个taverse函数;若是自己写的,得问写的人。
BTW:你这书比较烂吧,taverse这个成员函数的设计完全不符合C++的设计哲学.
C++是根据对象特性写算法,而那些垃圾的只能面向对象的语言才用这种丑陋的方式,或者使用同样丑陋的接口继承。
如果vector<T>要加一个taverse方法,那么list<T>、queue<T>、……等等是不是也要加,无数个容器就要加无数个一模一样的代码;
只能面向对象的垃圾语言想出了一个接口继承了办法,只要让它们继承同一个接口ITaverse就可以避免代码重复。但是又有新问题,下次想出个taverse2的话,岂不是又要将之前的库全加上ITaverse2,而且标准库不是自己可以私自改的。
C++中就很简单了,不多说,直接上代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;
int main()
{
std::vector<int> a = { 1, 2, 3 };
std::list<int> b = { 4, 5, 6 };
int c[] = { 7, 8, 9 };
auto visit = [](int v){ cout<<v<<'\n'; };
std::for_each( std::begin(a), std::end(a), visit );
std::for_each( std::begin(b), std::end(b), visit );
std::for_each( std::begin(c), std::end(c), visit );
// or
for( auto v : a ) visit(v);
for( auto v : b ) visit(v);
for( auto v : c ) visit(v);
return 0;
}
多么简洁美观呀,即使我自己写个新的容器,也可以不用作任何修改就直接使用std::for_each。
再看你的代码
template<typename T,typename VST>
void vector<T>::taverse(VST & visit) //函数对象
{ for(int i=0;i<_size;i++) visit(_element[i]); }
好多中文全角符号呀,而且下标竟然用int,自增竟然用后增,也不知道哪个歪歪老师教的