2013-11-23 57 views
1

我是一名從「C++ Primer第5版」練習的新手,第110頁,其內容如下: 編寫一個程序來打印矢量的大小和內容,如下所示。我可以使用模板處理迭代器嗎?

的(a)vector<int> v1;

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

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

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

能否使用模板函數來處理字符串和上述詮釋矢量? 我寫了這樣的功能:

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"; 
     } 
    } 

產生的誤差是需要「typename的」前「的std ::矢量::迭代器」,因爲「標準::矢量」是一個依賴範圍。

是否可以這樣做? 如果是這樣,我應該如何修復代碼? Thx。

+0

什麼是「vector 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和字符串放在那裏。仍然沒有工作..並得到了錯誤:'std :: vector ::迭代器'無效聲明' –

+0

爲什麼?這不是關於放置字符串或整數,而是用**'typename'前綴迭代器聲明** –

+0

我很愚蠢......現在可以工作了......謝謝了! –

相關問題