我试图实现一个链表类在C和我有问题。我有添加新节点的=运算符。
链接列表类接口:
template <typename Type>
class LinkedList {
public:
LinkedList<Type>* head;
// linked list stracture
Type data;
LinkedList<Type>* next;
// others ....
size_t length;
public:
LinkedList();
~LinkedList();
void initializeHead(LinkedList<Type>* headPtr);
size_t size() const;
LinkedList& operator+=(const Type& add);
void operator-=(const Type& remove);
LinkedList<Type>& operator[] (const size_t index) const;
bool operator== (const LinkedList<Type> &versus) const;
friend ostream& operator<< (ostream& out,LinkedList& obj);
};
这里我有=重载实现:
template <typename Type> LinkedList<Type>& LinkedList<Type>::operator +=(const Type& add) {
// head ptr - :)
LinkedList<Type>* p = head->next;
// go to the end
while(p) p = p->next;
// now on end - create new..!!!
try {
p = new LinkedList<Type>;
} catch (bad_alloc& e) {
cout << "There\'s an allocation error....";
} catch (...) {
cout << "An unknown error.." << endl;
}// fill and done
p->data = add;
p->next = NULL;
// increment length .........
++head->length;
// done ............
return *p;
}
此外,我还有“数组”访问重载方法:
template <typename Type> LinkedList<Type>& LinkedList<Type>::operator [](const size_t index) const {
if(index < 0 || index >= length) // invaild argument
throw exception();
// continue
LinkedList<Type>* p = head;
for(size_t i = 0; i < index; ++i) p = p->next; // we are at what we want
return *p;
}
一切正常-我检查了dibugger,
问题是-=不在“head”中保存新节点-
有人知道为什么新的分配没有链接到头-
谢谢!!
正如其他答案所说,当您尝试添加时,您超出了列表。试着这样做:
template <typename Type> LinkedList<Type>& LinkedList<Type>::operator +=(const Type& add)
{
LinkedList<Type> *last;
// Find the last node in the list
for (last = head; last != 0 && last->next != 0; last = last->next)
{
}
// `last` now points to the last node in the list, or is zero
// If zero (i.e. NULL) then list is empty
if (last == 0)
{
head = new LinkedList<Type>;
head->next = 0;
head->data = add;
head->length = 0;
}
else
{
last->next = new LinkedList<Type>;
last->next->next = 0;
last->next->data = add;
}
// We can safely use `head` as we are sure it won't be zero
head->length++;
// Return the added node
return (last != 0 ? *last->next : *head);
}
而不是:
// go to the end
while(p) p = p->next;
您需要:
head->next = p;
我在项目中使用Crudepository进行数据库操作。当我使用由Spring实现的保存方法更新持久化数据时,其他字段将被覆盖。例如,我只发送firstName进行更新,但lastName被转换为空字段。 简单地说,我用这样的实体调用保存方法: 我正在将此JSON发送到更新方法: Spring 将此 JSON 转换为 Rest api endpoint的成员。成员.java是: 如何防止覆盖其他字
问题内容: 我有一个用@Transactional注释的方法。我从Oracle数据库检索一个对象,更改一个字段,然后从该方法返回。我忘了保存对象,但是发现无论如何都会更新数据库。 applicationContext 我的方法 我的问题是为什么MyObject会持久保存到数据库? 问题答案: 因为hibernate将自动检测对持久实体所做的更改并相应地更新数据库。hibernate参考手册的第11
其他认证方法 还有两种其他身份验证方法值得一提。它们是一次性密码和证书。 一次性密码 FreeRADIUS包含一个名为rlm_otp的模块,可用于处理OTP(一次性密码)令牌。该模块应与其他程序一起使用。 不幸的是,为其他程序提供代码的公司Tri-D Systems已经不存在了。但是,代码是分叉的,现在可以从Google Code(http://code.google.com/p/otpd/)获得
所以如果我对一个已经注册的条目调用那个方法,如果它发现一个改变了的属性,它就会更新它? 多谢了。
前言 数组的其他方法如下: 方法 描述 备注 indexOf(value) 从前往后索引,获取 value 在数组中的第一个下标 lastIndexOf(value) 从后往前索引,获取 value 在数组中的最后一个下标 find(function()) 找出第一个满足「指定条件返回true」的元素。 findIndex(function()) 找出第一个满足「指定条件返回true」的元素的in
我有Point2D类作为基类,为了存储点列表,我通常使用,但现在我想在中添加额外的方法和一些属性,比如用于打印的ToString方法,基于特定坐标的排序,用于筛选点的特定方法,我不想使用扩展方法。 我创建了一个新的类,它继承了类,它在正常情况下工作很好,但是当使用FindAll函数时,它现在返回但我希望它返回。我知道我可以编写自己的方法来接受谓词委托,但这是太多的工作了。