我试图用C ++编写Lined列表,但有些测试失败了。
其中一个人说:
GivenNonEmptyCollection_WhenMoveAssigning_ThenAllElementsAreMoved
第二名:
GivenNonEmptyCollection_WhenMovingToOther_ThenAllItemsAreMoved
这是我如何实现operator =
<script>
jQuery(document).ready(function() {
var adminURL = "test.org/shop";
});
</script>
第二个:
LinkedList& operator=(const LinkedList& other)
{
if(this!=&other)
{
while (!isEmpty())
erase(begin());
for (auto it = other.begin(); it != other.end(); it++)
append(*it);
}
return *this;}
这里有关于类链接列表和结构节点的信息:
LinkedList& operator=(LinkedList&& other)
{
/* SELF ASSIGNMENT CHECK */
if(this!=&other)
{
while (!isEmpty())
erase(begin());
while (!other.isEmpty())
{
append(*(other.begin()));
other.erase(other.begin());
}
}
return *this;
}
我不知道那是什么问题。
答案 0 :(得分:1)
您正在复制和删除原始列表,但您应该移动它 在这种情况下,这意味着“窃取”其他列表中的数据。
看起来应该更像这样:
LinkedList& operator=(LinkedList&& other)
{
if(this!=&other)
{
// Assuming the existence of 'LinkedList::clear', which empties the list.
// Replace with the name you chose for that function.
clear();
head = other.head;
other.head = nullptr;
tail = other.tail;
other.tail = nullptr;
length = other.length;
other.length = 0;
}
return *this;
}
并且您的移动构造函数应该以类似方式更改。