2011-10-18 1 views
0

포인터를 목록에 삽입하려고 시도하지만 목록을 인쇄하려고하거나 목록의 내용을 확인하려고 할 때마다 비어 있다고 말합니다. 이것은 내 삽입이 잘못된 것을 의미합니다,하지만 난 내 다음과 같은 클래스가 왜, 이해가 안 :요소를 삽입 한 후에도 list가 비어있는 상태입니다. C++

namespace { 

    template <typename T> 
    pair < node<T>*, bool> addElement (const T& elem, btree<T>* bt) { 

    class list < node<T>* >::iterator itr = bt->level().begin(); 

    if (bt->level().empty()) { 
     node <T>*n = new node<T>(elem, bt->max()); 
     cout << n->getItem() << endl; 
     bt->addElem(itr, n); 
     return make_pair(n, true); 
    } 

    for (; itr != bt->level().end(); ++itr) { 
     if (elem < (*itr)->getItem()) { 
      node <T>* n = new node<T> (elem, bt->max()); 
      (*itr)->previous()->addNext(n); 
      n->addPrev((*itr)->previous()); 
      n->addNext(*itr); 
      (*itr)->addPrev(n); 
      bt->addElem(itr, n); 
      return make_pair(n, true); 
      } else if (elem == (*itr)->getItem()) return make_pair(*itr, false); 
      } 

    // other stuff + return statement 

} 

addElem는 다음을 수행합니다

size_t maxNodeElems; 
list < node<T>*> neighbours; 
: btree 클래스로 구성

void addElem (std::_List_iterator<node<T>*>& itr, node <T>* n) { 
    neighbours.insert(itr, n); 
    if (neighbours.empty()) cout << "wa?"; 
} 

addPrev()previous()과 같은 다른 것들은 게터 및 설정자입니다. 어쨌든, 나는 그것에 대해 btree을 생성하는 테스트 파일을 실행하고이 addElement 함수를 직접 호출하는 insert 함수를 호출합니다. 그러나 btree 내부에서 목록을 인쇄하려고 할 때마다 빈 상태와 seg 오류가 표시됩니다. 왜 저장하지 않는지 나는 이해하지 못한다.

도움이 될 것입니다.

참고 : "Wa?"

// find the place to insert elem 
for (; itr != bt->level().end(); ++itr) { 
    if (elem < (*itr)->getItem()) { 
     // insert... 
    } 
} 

그러나 목록 (초기 상태) 비어있는 경우, ITR은 아마도 동일한 BT-> 레벨 (될 것입니다 : 당신이 정렬 된 목록을 유지하려고하는 것 같다

+0

표시 코드가 잘못되었을 수 있습니다. 트리를 인쇄하는 코드도 표시하십시오. –

+0

@ graham.reeds 필자는 addElem 안에 'if neighbors is empty print something'을 말한 뒤에'if '문을 써서 항상 무언가를 출력했습니다. – SNpn

+0

디버거 사용법을 배우십시오 - 왜 작동하지 않는지 더 많이 알려줍니다. 관심이 없다면 어떤 IDE를 사용하고 있습니까? – Skizz

답변

0

인쇄 유지 당신은 왜, 그건) .end() 처음에는 아무 것도 삽입하지 않으므로 아무 것도 삽입하지 않습니다.

(elem < (* itr) -> getItem() 요소를 삽입하려고 할 때 대/소문자를 고려해야합니다.)는 항상 false입니다 (목록에서 새로운 가장 큰 요소). 그 사건도 처리해야합니다.

+0

아래 부분에 가장 큰 요소들을 넘겨 줬습니다. OP에 추가하십시오. 첫 번째'if' 문은 비어있을 때 목록을 처리하지만, intitially 요소를 추가하더라도 작동하지 않습니다. – SNpn

관련 문제