2017-02-21 53 views
0

因此,在標題中對這個問題的措辭有點困難。評估指針的指針是否存在'n'值

基本上,我有一個班'人'。 此人通過這個功能點的導師

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

我的一個條件必須是有最多可用4個級別的人 - 導師。所以我想,以檢查是否

person->getMentor() 

存在,如果它超過三次,則層次過大,該方法會返回一個錯誤。任何想法,我怎麼做更優雅,而不是把它寫在一個巨大的線?

+0

你爲什麼要設置一個導師的數量限制?在現實生活中沒有任何限制某人的導師的能力也有導師。這種聯繫甚至有可能是循環的(例如,A是B的導師,C是C的導師,A是導師)。應對這種情況應該更好,而不是強加任意深度的聯繫。 – Peter

回答

1

你有什麼基本上是一個鏈接列表,你可以迭代和檢查:

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