即使在插入元素C ++之后,list仍保持空白

时间:2011-10-18 08:37:52

标签: c++ b-tree

我正在尝试将指针插入列表,但每次我尝试打印列表,或者检查列表中的内容时它都是空的。这意味着我的插入不正确,但我不明白为什么,我的以下类是:

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?”继续打印

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试保留已排序的列表,这就是您拥有的原因:

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

但是如果列表为空(初始状态),那么itr可能首先等于bt-&gt; level()。end(),所以你永远不会插入任何东西......

当您尝试插入元素(elem&lt;(* itr) - &gt; getItem())始终为false(列表中新的最大元素)时,您也应该考虑这种情况。你也需要处理这个案子。