迭代器以-1为返回特殊值

来源:7-3 相邻结点迭代器

merci995

2019-05-20

老师好

int begin() {
    index = 0;
    if (G.g[v].size()) {
        return G.g[v][index];
    }
    return -1;
}
// ...

我们定义迭代器时,用返回-1作为特殊值;这里应该是假设图里存的都是非负数吧。但是我们定义稀疏图的时候用的是 vector<vector<int>> g,没有用unsigned int,得需要在测试用例那里确定不含负数编号-1的节点。
我理解的对吗?

写回答

2回答

Suspendz

2020-09-17

不是说存的是非负数。拿邻接表来说,里面存的是与某个节点相连的其他所有节点,但是你怎么表示节点呢,这是要靠索引的。也就是说例如节点1连接了节点234,这个1234实际上不是说节点里面存的就是1234这些int数值,而是说这些节点的索引是1234。
例如一个自定义类型构成的二维数组邻接表,你要表示这些节点一样是用索引来表示的而不是用实际的对象来来表示它。例如在迭代的时候next返回下一个内容,它返回的是下一个元素在二维数组里第二个纬度上的索引(第一个纬度值是v),而不是返回的实例对象本身。
那么返回-1就很好理解了,返回的是在二维数组上的索引,这个索引是0开始的,怎么会出现-1呢,所以我们就可以拿来表示异常数据了

0
1
liuyubobobo
赞!就是这个意思!:)
2020-09-17
共1条回复

liuyubobobo

2019-05-20

迭代器里返回的是图的顶点索引。所有的索引一定是非负数,所以返回-1代表不是一个合法索引:)


是的,再具体使用的时候,可以靠判断这个值是否合法,来确认某个点是否不含有邻边。


这个设计,和对一个字符串,设计一个find函数,查找第一次出现某个char的位置,是一样的。如果这个char从没有出现过,我们可以返回-1,因为这是一个非法的索引值:)


继续加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11210 学习 · 1617 问题

查看课程