2013-11-23 3 views
1

저는 "C++ Primer 5th edition", p110에서 연습을하고있는 초보자입니다 : 다음과 같이 벡터의 크기와 내용을 인쇄하는 프로그램을 작성하십시오.템플릿으로 반복자를 처리 할 수 ​​있습니까?

(a) vector<int> v1;

(b) vector<int> v2(10);

(F) vector<string> v6{10};

(g) vector<string> v7{10, "hi"};

내가 모두 스트링을 처리하는 템플릿 함수를 사용하여 상기 벡터 값 int 수 ? '표준 : : 벡터'종속 범위이기 때문에 오류가 발생

template<class t> 
    void check_vector(vector<t> *_v) 
    { 
     if(_v->begin() == _v->end()) 
     { 
      cout << "the vector is empty\n"; 
     } 
     else 
     { 
      int i=0; 

      for(vector<t>::iterator it = _v->begin(); it != _v->end(); it++) //error. 
      { 
       cout << *it; 
       i++; 
      } 
      cout << "\nthe size is : " 
        <<i 
        <<"\n"; 
     } 
    } 

은 '표준 : : 벡터 :: 반복자 전에 필요'유형 이름을 '이다 는이 같은 기능을 썼다.

그렇게 할 수 있습니까? 그렇다면 코드를 어떻게 수정해야합니까? Thx.

+0

"벡터 v1"이란 무엇입니까? 무슨 뜻이야? – aschepler

+0

그래서 거기에 넣어! 일반적으로 컴파일러를 신뢰할 수 있습니다. 컴파일러가 그런 힌트를 제공한다면 믿을 수 있습니다. –

+0

v1은 그냥 빈 벡터입니다. @ aschepler –

답변

2

컴파일러는 매우 명확하게 당신이 그것을 해결하기 위해

for(typename vector<t>::iterator it = _v->begin(); it != _v->end(); it++) 
// ^^^^^^^^ 

를 작성 알려줍니다. 너 그거 해봤 니?

typedef typename vector<t>::iterator It; 
for(It it = _v->begin(); it != _v->end(); it++) 

적어도

작동합니다.

+0

안녕하세요. int와 string puting을 시도했습니다. 여전히 작동하지 않았고 오류가 발생했습니다 : 'std :: vector :: iterator'의 잘못된 선언 –

+0

왜? 그것은 문자열이나 int를 넣는 것이 아니라 iterator 선언 앞에 ** typename'을 붙이는 것입니다 ** ** –

+0

저는 너무 어리 석다 ... 지금 작동합니다 .. 많이 감사합니다 !! –

관련 문제