在循环检查空指针时简化DO
Simplify Do While Loop Checking for Null Pointer
我有一个我不知道的真正基本问题。我正在使用带有哈希表的链条来存储彼此相撞的节点。我使用do while
循环至少打印第一个节点一次,并在存在的情况下继续打印链条节点。但是,为了穿越链式列表,我需要更改下一个循环的节点的地址。无论如何我尝试写这篇文章,我发现自己重复了代码,我试图通过使用此循环来避免。请帮助
do {
cout << "Bid id: " << table.at(i)->bidId << " title: " << table.at(i)->title <<
" fund: " << table.at(i)->fund << " amount: " << table.at(i)->amount << endl;
if (table.at(i)->next!=nullptr){//check if first node has next node
table.at(i) = table.at(i)->next; //change address to the next pointer
}// how do I avoid repeating my condition below?
}
while (table.at(i)->next!=nullptr);
此代码将在循环中复制功能,而无需重复检查检查。
while(true)
{
cout << /* stuff */ endl;
auto next = table.at(i)->next;
if(next)
table.at(i) = next;
else
break;
}
从描述中,您确定在循环浏览它们时要重新分配哈希地图内的值吗?我怀疑此代码可能更适合您的意图/需要更好:
auto current = table.at(i);
while(current)
{
cout << /* stuff */ endl;
current = current->next;
}
当您发现自己处于这种情况下时,最好质疑您的前提。在这种情况下,我谈论的是您需要do while
循环的假设。
如果您的数据不存在或您的容器是空的,则do while
将无法完成这项工作,因为它至少会循环一次。
通常,要通过一系列数据集进行迭代,您需要使用for
或while
循环。
如果我正确理解代码,则您需要一个前提条件循环,而不是邮政循环循环,就像您现在一样。例如:
while (table.at(i)) {
cout << "Bunch of stuff";
table.at(i) = table.at(i)->next;
}
您可以尝试:
for(auto node = table.at(i)->next;node!=nullptr;node=node->next)
cout << "Bid id: " << node->bidId << " title: " << node->title;
您可能需要使用适当的方法替换node = table.at(i)->next
的位置。
您可以在此处使用 c 11 's 范围。您只想知道,在完成分配之前,value->next
不是nullptr
。休息全部都是由简单而现代的基于循环的范围
for(auto const& value: table) {
if (value->next != nullptr) {
value = value->next;
}
}
以这种方式更快,更安全
如果您真的想在循环后获得最后一个元素,则可以:
do {
cout << "Bid id: " << table.at(i)->bidId
<< " title: " << table.at(i)->title
<< " fund: " << table.at(i)->fund
<< " amount: " << table.at(i)->amount << endl;
if (table.at(i)->next == nullptr){
break;
}
table.at(i) = table.at(i)->next;
} while (true);
// table.at(i) != nullptr && table.at(i)->next == nullptr
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 成员访问是否在空指针上定义C++?
- 尝试将对象插入空指针数组时出现分段错误
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 是否允许向空指针添加零?
- 为什么 C 样式字符串的工作空指针检查不?
- 在函数内初始化无符号字符指针将返回空指针
- 为什么多维数组中的空字符串文本衰减为空指针?
- C++ 取消引用指向矢量的空指针时的分段错误
- 错误 C6011:取消引用空指针"NAME"。C++
- cppcheck取消引用空指针
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- 递增空指针无法正确设置值
- 在循环检查空指针时简化DO
- Do C和C++标准意味着地址空间中必须只存在一个特殊值来表示空指针的值