2017-10-15 3 views
0

for 루프를 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 (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 번 반복됩니다.

+2

가 [최소 완료하고 검증 가능한 예]를 입력하십시오 (https://stackoverflow.com/help/mcve). – Ron

답변

1

프로그램은 루프 반복 3에서 멈추지 않고 오히려 3 번의 반복 후에 매달린다. 이것은 무한 루프를 입력하는 것으로 보이는 Queue :: Size() 함수 때문일 가능성이 큽니다.

난 당신이 같은 수의 크기를 의미 생각 :

int Size() 
{ 
    int queueSize = 0; 
    Node<T>* element = FirstElement; 

    if (nullptr != FirstElement) 
    { 
     while (nullptr != element->Previous) 
     { 
      element = element->Previous; 
      ++queueSize; 
     } 
     ++queueSize; 
    } 
    return queueSize; 
}