我有一个名为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
}
}
非常感谢帮助!
答案 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
,则该功能将仅删除第一个项目。您必须确保其余代码对该行为没有问题。