0
なぜループは3回ですか?ノード構造のためループループの場合のみ3回
#ifndef QUEUE_H
#define QUEUE_H
#include "Node.h"
#include <stdexcept>
template<class T>
class Queue
{
public:
Queue()
{
this->FirstElement = nullptr;
this->LastElement = nullptr;
}
void Enqueue(T value)
{
if (0 == Size())
{
FirstElement = new Node<T>(value);
LastElement = FirstElement;
}
else
{
LastElement->Previous = new Node<T>(value);
LastElement = LastElement->Previous;
}
}
T Dequeue()
{
if (0 == Size())
{
throw std::out_of_range("Out of range ! Empty stack !");
}
T element(FirstElement->Value);
if (nullptr != FirstElement->Previous)
{
Node<T>* temp = FirstElement->Previous;
delete FirstElement;
FirstElement = temp;
}
else
{
delete FirstElement;
FirstElement = nullptr;
LastElement = nullptr;
}
return element;
}
int Size()
{
int queueSize = 0;
Node<T>* element = FirstElement;
if (nullptr != FirstElement)
{
while (nullptr != FirstElement->Previous)
{
++queueSize;
}
++queueSize; //Uwzglednienie ostatniego elementu, ktory nie jest policzony w petli
}
return queueSize;
}
private:
Node<T>* FirstElement;
Node<T>* LastElement;
};
#endif // !QUEUE_H
とコード:
#ifndef NODE_H
#define NODE_H
template<class T>
struct Node
{
public:
Node(T value)
{
this->Previous = nullptr;
this->Value = value;
}
Node<T>* Previous;
T Value;
};
#endif // !NODE_H
そして、ここで私は3 に等しく、ここではキュークラスのコードであるとき、forループ
for (size_t i = 0; i < 10; i++)
{
std::cout << "Dodany element kolejki: " << i << std::endl;
queue.Enqueue(i);
}
常に破ります
Dodany element kolejki: 0
Dodany element kolejki: 1
Dodany element kolejki: 2
ループのエンキューメソッドの呼び出しを10回削除します。コンパイラや例外がスローされたり、その他のエラーが発生したりすることはありません。これは何らかの理由で3回ループしただけです。
。 – Ron