评估指针的指针是否存在于' n'值

时间:2017-02-21 09:21:15

标签: c++ pointers

所以在标题中用这句话来表达这个问题有点困难。

基本上,我有一个班级' Person'。 此人通过此功能指向导师

void Person::setMentor(Person* person) {
// bunch of conditions
mentor = person;
}

我的一个条件必须是最多可以有4个级别的人物导师。所以我想检查是否

person->getMentor()

存在,如果它超过三次,则层次结构太大,方法将返回错误。任何想法我如何更优雅,而不是写一个巨大的线?

2 个答案:

答案 0 :(得分:1)

你所拥有的基本上是一个链表,你可以迭代并检查:

int depth;
for (depth = 0; depth < MENTOR_LIMIT; depth++) {
    if ((person = person->getMentor()) == NULL) {
        break;
    }
}
if (depth >= MENTOR_LIMIT) {
    // return error
}

答案 1 :(得分:1)

鉴于

Person person;
person.mentor = new Person;
person.mentor->mentor = new Person;
person.mentor->mentor->mentor = new Person;

以下代码

auto countMentors(const Person& person)
{
    std::size_t count = 0;
    for(auto p = &person; p->getMentor() != nullptr; p = p->getMentor())
    {
        ++count;
    }

    return count;
}

将返回3