do-while
或者
for
循环。
但是
更自然是因为它能检查身体状况
之后
您有一个循环的数据结构,并且(可能)希望打印每个元素一次。
只绕了一圈。
do{...move circulator}while(compare with head)
CGAL实现了“循环器”并做到了这一点,它从“head”开始做一些事情并增加循环器,直到它再次成为head。
看到了吗
https://doc.cgal.org/latest/Circulator/classCirculator.html
(滚动至示例)。
空虚
一开始,但也许你想要。
(在我看来,循环缓冲区永远不会是空的,但我接受其他观点。)
while
您有:
Node * copyOfHead = head;
do
{
std::cout<<copyOfHead->data;
copyOfHead = copyOfHead->nextNode;
}while(copyOfHead != head);
与
你可以有
Node * copyOfHead = head;
for(;;){
std::cout<<copyOfHead->data;
copyOfHead = copyOfHead->nextNode;
if(copyOfHead == head) break;
}
或
for(Node * copyOfHead = head;;){
std::cout<<copyOfHead->data;
copyOfHead = copyOfHead->nextNode;
if(copyOfHead == head) break;
}
或
for(Node * copyOfHead = head; ; copyOfHead = copyOfHead->nextNode){
std::cout<<copyOfHead->data;
if(copyOfHead->nextNode == head) break;
}
for(
Node * copyOfHead = head;
std::cout<<copyOfHead->data;
copyOfHead = copyOfHead->nextNode
) if(copyOfHead->nextNode == head) break;
主要优势
对于
是初始化,但还是不值得。
当然,您可以在循环之外执行该步骤,但随后会有重复的代码等。
(不推荐,甚至可能有bug)
Node * copyOfHead = head;
std::cout<<copyOfHead->data;
copyOfHead = copyOfHead->nextNode;
for(; copyOfHead != head ;copyOfHead = copyOfHead->nextNode){
std::cout<<copyOfHead->data;
}
所以,你看到了,
做一会儿
正是这种数据结构所需要的!和
(或
while-only
不要
想要。