链接列表运算符=移动分配然后移动所有元素

时间:2017-11-09 15:07:52

标签: c++

我试图用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;
  }

我不知道那是什么问题。

1 个答案:

答案 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;
  }

并且您的移动构造函数应该以类似方式更改。