gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:04:01 25 4
gpt4 key购买 nike

我有一个名为 Alist 的基于数组的列表类,它具有以下删除功能。请注意,一切都是相对于围栏完成的,因此移除项目是在围栏的右侧完成的。这意味着如果我想删除一个特定的项目,我应该将 fence 的值设置为该项目的索引,然后调用 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;

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

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

我的removeMajor函数是错误的,我不知道如何将围栏的位置设置到我要删除的元素上。谁能帮帮我?

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

bool setPos(int pos)
{
if ((pos >= 0) && (pos < listSize))
fence = pos;
return (pos >= 0) && (pos < listSize);
}

非常感谢您的帮助!

最佳答案

我建议创建一个函数,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因为你有“围栏”项目。

请注意,如果有多个项目等于item , 该函数将只删除第一个。您必须确保您的其余代码没有该行为的问题。

关于c++ - 删除函数 - 基于数组的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32747813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com