我正在尝试将指针插入列表,但每次我尝试打印列表,或者检查列表中的内容时它都是空的。这意味着我的插入不正确,但我不明白为什么,我的以下类是:
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)
您似乎正在尝试保留已排序的列表,这就是您拥有的原因:
// 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(列表中新的最大元素)时,您也应该考虑这种情况。你也需要处理这个案子。