删除函数 - 基于数组的列表

时间:2015-09-23 19:21:03

标签: c++ arraylist

我有一个名为Alist的基于数组的列表类,具有以下删除功能。请注意,所有操作都是针对栅栏完成的,因此在栅栏右侧执行移除项目。这意味着如果我想删除一个特定的项目,我应该将fence的值设置为该项目的索引,然后调用remove函数。

$scope.rowSelected() = function(){
  $http.get(...).then(function(result){
    $scope.heatMapData = result.data;
    $scope.updateHeatMap();
  });
}

$scope.updateHeatMap = function(){
    var selection = d3.select("#heatmap");
    var heatMap = selection.selectAll(".hour").data($scope.heatMapData);

    heatMap.enter().append("rect")
      .attr("x", function(d) { return (d.hour - 1) * gridSize; })
      .attr("y", function(d) { return (d.day - 1) * gridSize; })
      .attr("rx", 4)
      .attr("ry", 4)
      .attr("class", "hour bordered")
      .attr("width", gridSize)
      .attr("height", gridSize)
      .style("fill", colors[0]);

   heatMap.transition().duration(1000)
          .style("fill", function(d) {return $scope.colorScale(d.value);});

   heatMap.exit().remove();
};

现在我已经创建了一个专业列表并实现了以下功能:

template <class Elem>
bool AList<Elem>::remove(Elem& item) 
{
    if (rightLength() == 0) return false;

    it = listArray[fence + 1]; // Copy element

    for (int i = fence + 1; i < listSize; i++)
    {
        listArray[i] = listArray[i + 1]; 
    }

    listSize--;
    return true;

我的removeMajor函数错误,我不知道如何将栅栏的位置设置为我想要删除的元素。有谁可以帮助我?

侧注:( setPos()函数如下)

void removeMajor(AList<Major> &t, Major &m)
{
   if (t.find(m))
   {
       t.setPos() // ??? Not sure 
       t.remove(m); //inserting major
   }
}

非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

我建议创建一个函数find

template <class Elem>
int AList<Elem>::find(Elem& item) 
{
   for (int i = fence + 1; i <= listSize; i++)
   {
      if ( listArray[i] == item )
      {
         return i;
      }
   }

   return -1;
}

然后,在remove的实现中使用它。

template <class Elem>
bool AList<Elem>::remove(Elem& item) 
{
   int index = this->find(item);
   if ( index == -1 )
   {
      return false;
   }

    for (int i = index; i <= listSize; i++)
    {
        listArray[i] = listArray[i + 1]; 
    }

    listSize--;
    return true;
}

在这两个函数中,我使用的是i <= listSize,因为你有“fence”项。

请注意,如果有多个项目等于item,则该功能将仅删除第一个项目。您必须确保其余代码对该行为没有问题。