2014-10-10 3 views
0

어쩌면 내가 더 새롭고, 어떤 종류의 질문이 속해 있는지 정의 할 수 없기 때문일 수 있습니다. 그래서 나는 검색 후 원하는 결과를 찾지 못했습니다.템플릿 반환을 처리하는 방법은 무엇입니까?

은 C++ 템플릿

template<class T> struct Node 
{ 
    T value; 
    Node<T>* pre; 
    Node<T>* next; 

}; 
template<class T> class Flist 
{ 
    private: 
     Node<T>* front; 
     Node<T>* end; 
     int count; 

    public: 
     Flist(); 
     ~Flist(); 
     Flist(const Flist& C_list); 
     inline void Deeply_Copy(const Flist& Copylist); 
     bool Isempty() const; 
     int Listsize() const; 
     Node<T>& Listfront()const; 
     Node<T>& Listend() const; 
     void push_front(T N); 
     void push_back(T N); 
     void del_front(); 
     void del_back(); 
     Node<T>* Listfind(T x); 
     T ShowKey(int n); 

}; 


template<class T> T Flist<T>::ShowKey(int n) 
{ 
    if (front == 0) 
     { 
      cout << "there is no element is the list.." << endl; 
      return ???; 
     } 
    Node<T>* temp = front; 
    while(n--) 
    { 
     temp = temp->next; 
    } 
    return temp->value; 

} 

함수 showkey로 (INT의 N) 나는 (단지 보여주지)가 반환 할 n 번째 요소의 값 내 링크리스트의 구현입니다, 그러나 목록이 비어있는 경우 , 나는 무엇을 돌려야할지 모른다. 나는 그 절차를 멈추기 위해 출구를 사용하고 싶지 않다. 이 상황을 다루는 데 더욱 친숙한 방법이 있습니까?

+1

예외를 던지겠습니까? – chris

+2

'발견되지 않음'을 나타내는 고유 한 'T'를 작성하십시오. 또는 반복자를 반환하십시오. – jww

+1

이 줄'temp = temp-> next;는'n '이 목록의 항목 수보다 큰 경우 NULL 포인터를 역 참조합니다. –

답변

2

나는

bool showKey(int n, T& value); 

에 함수 서명을 변경하고 값 변수를 설정하고 항목이 인덱스 N에있는 경우 true를 반환하고, false를 반환하는 데 사용 (불변 가치를두고) 항목이있는 경우 것 존재하지 않습니다.

0

가장 좋은 옵션은 예외를 throw하는 것입니다. std::domain_error 또는 std::range_error이 적합 할 수 있습니다.

관련 문제