gpt4 book ai didi

c++ - 我把这个 if 语句放在哪里会有所不同吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:21 26 4
gpt4 key购买 nike

所以我在一个带有链接列表的实验室工作,我遇到了一个部分,如果在遍历列表后没有找到元素,我必须输出一条错误消息。我的问题是,将这个 if 语句放在 while 循环之后还是放在 else 语句之后,难道不应该有所不同吗?如果我把它放在第二个 else 之后,函数不应该在 else 执行完后立即结束吗?我试着运行它,但我仍然得到相同的预期输出,但我试图弄清楚把它放在哪里最有意义,因为实验室是根据效率和风格进行分级的。

void AnyList::deleteNode(int deleteData)
{
if (count == 0)
{
cerr << "Cannot delete from an empty list.\n";
}
else
{
Node *current = ptrToFirst;
bool found = false;

if (current->getData() == deleteData)
{
ptrToFirst = current->getPtrToNext();
delete current;
current = NULL;
count--;
found = true;
}
else
{

Node *trailCurrent = current;
current = current->getPtrToNext();

while (current != NULL && !found)
{
if (current->getData() == deleteData)
{
trailCurrent->setPtrToNext(current->getPtrToNext());
delete current;
current = NULL;
trailCurrent = NULL;
count--;
found = true;
}
else
{
trailCurrent = current;
current = current->getPtrToNext();
}
}
//if (!found) <-- Does it make more sense to put it here?
//{
// cerr << "Item to be deleted is not in the list.\n";
//}

}
//if (!found) <-- Or here?
//{
// cerr << "Item to be deleted is not in the list.\n";
//}
}

}

最佳答案

if (!found) block 放在它可能实际运行的更有限的范围内,有助于读者理解和维护代码。

没有功能差异(即程序以两种方式做同样的事情)。

应该没有性能差异(优化构建)。当 current->getData() == deleteDatatrue 时,它将设置 found true,所以有'检查 if (!found) 毫无意义。您的编译器应该足够聪明,可以从 if (current->getData() == deleteData) 控制的语句 block 末尾跳到 if ( !found) { ... } block ,在这种情况下,性能将与拥有 `if (!found) 是更本地化的范围相同。

关于c++ - 我把这个 if 语句放在哪里会有所不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48970326/

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