顺序线性表的遍历问题??
这是顺序线性表的类
template <class ElemType>
class SqList
{
protected:
// 顺序表实现的数据成员:
int count; // 元素个数
int maxSize; // 顺序表最大元素个数
ElemType *elems; // 元素存储空间
// 辅助函数
bool Full() const; // 判断线性表是否已满
void Init(int size); // 初始化线性表
public:
// 抽象数据类型方法声明及重载编译系统默认方法声明:
SqList(int size = DEFAULT_SIZE); // 构造函数
virtual ~SqList(); // 析构函数
int Length() const; // 求线性表长度
bool Empty() const; // 判断线性表是否为空
void Clear(); // 将线性表清空
void Traverse(void (*Visit)(const ElemType &)) const; // 遍历线性表
StatusCode GetElem(int position, ElemType &e) const; // 求指定位置的元素
StatusCode SetElem(int position, const ElemType &e); // 设置指定位置的元素值
StatusCode Delete(int position, ElemType &e);// 删除元素
StatusCode Insert(int position, const ElemType &e); // 插入元素
SqList(const SqList <ElemType> ©); // 复制构造函数
SqList <ElemType> &operator =(const SqList <ElemType> ©); // 赋值语句重载
};
这是遍历顺序表的实现:
template <class ElemType>
void SqList <ElemType>::Traverse(void (*visit)(const ElemType &)) const
// 操作结果:依次对线性表的每个元素调用函数(*visit)
{
for (int curPosition = 1; curPosition <= Length(); curPosition++)
{ // 对线性表的每个元素调用函数(*visit)
(*visit)(elems[curPosition - 1]);
}
}
我对于这个遍历函数的参数看不明白
void (*visit)(const ElemType &)
希望大家帮忙解释一下,谢谢了
[解决办法]
有点复杂,下去研究研究[color=#FF0000][/color]
[解决办法]
const ElemType &
首先 ElemType 是宏定义的一个数据类型替换 像int,double ,char 之类的 也是你的数组的类型
其次 & 说明所引用的实参不是经过复制传入函数的,而是直接传入,这样可以节省时间,还能够直接对传入的数据进行修改。
最后 const 关键字说明 传入的参数不能够被修改。
就这样。
[解决办法]
函数指针,使用者可以定义一个void (*)(const ElemType &)类型的函数作为参数传进去,灵活的按照自己需要的方式处理数据
[解决办法]
这个函数就是对表中的每个数据进行访问的意思
你可以把它定义成你自己的动作
许多教科书上的代码都是伪代码!
你把它COPY下来,不一定能通过编译