2011-10-18 38 views
0

我試圖插入指針到列表中,但每次嘗試打印列表或檢查列表中的內容時,它都顯示爲空。這意味着,我的插入是不正確的,但我不明白爲什麼,我的下面是一些:即使在插入元素後,列表仍保持爲空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執行以下操作:

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

其中btree類組成:

size_t maxNodeElems; 
list < node<T>*> neighbours; 

其他東西,如addPrev()previous()只是getter和setter。無論如何,我在其上運行了一個測試文件,它幾乎構造了一個btree,並且調用了一個insert函數,該函數直接調用這個addElement函數。但是,無論何時我試圖在btree內打印列表,它都會顯示空白和seg故障。我不明白爲什麼它不存儲。

任何幫助,將不勝感激!

注意:「Wa?」保持打印

+0

這可能是你的顯示代碼不正確。顯示打印樹的代碼。 –

+0

@ graham.reeds我在addElem裏寫了一個'if'語句,在'insert'語句後面說'如果鄰居是空的打印什麼東西'總是打印一些東西。 – SNpn

+0

學習使用調試器 - 它會告訴你更多關於它爲什麼不起作用的信息。出於興趣,你在使用什麼IDE? – Skizz

回答

0

似乎您試圖保持排序列表,這就是爲什麼你必須:

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

但如果該列表是空的(初始狀態),ITR很可能是相等的BT->水平( ).end()在第一位,所以你永遠不會插入任何東西...

你也應該考慮的情況下,當你試圖插入元素爲(eletr <(* itr) - > getItem() )始終是假的(列表中新的最重要的元素)。你也需要處理這種情況。

+0

我已經把下面這些部分中最偉大的元素添加到OP中。第一個'if'語句在空列表時處理列表,但即使我在初始階段添加元素,它也不起作用 – SNpn

相關問題