2013-04-16 34 views
1

我想循環遍歷一個向量並將所有輸入與一個值進行比較。所以我創造了這個結構:如何使迭代器的行爲像一個類型通過迭代?

for (vector<string>::const_iterator i = needle.begin(); i != needle.end(); ++i) {   
      cout << *i << " "; 

     } 

印刷工作的很好,但我希望能夠訪問std::string功能,即find 因此,雖然我能夠寫needle[index].find("sampleString");我希望能夠使迭代器的行爲與此類似。那麼如何製作如*i.find("sampleString");

回答

13

你幾乎在那裏,但運算符優先級意味着*i.find()不起作用。它試圖取消i.find(),而不是取消引用i,然後在結果上調用find。使用這些長相取其最好的給你:

(*i).find("sampleString"); 
i->find("sampleString"); 
+0

但爲什麼那麼這段代碼'爲(矢量 ::爲const_iterator I = needle.begin(); I = needle.end(); ++我!){ cout << i-> find(「hello world!」)<<「」; }',其中針矢量保持5個值,打印出這個輸出? '4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 ' – Dworza

+1

@Dworza:由於沒有任何字符串包含' 「世界,你好!」',所以'find'返回'STD: :string :: npos',這是一個很大的整數值。如果任何字符串確實包含您要查找的內容,則會得到一個較小的數字,表示它在字符串中找到的位置。我不知道你爲什麼得到超過5個數字打印;據推測,它實際上並不具有5個值,但是我不能看出你是如何填充它的。如果您對「查找」的工作方式有疑問,或者您的媒介爲什麼沒有預期的內容,那就問問他們是否有新問題。 –

+0

呃......是啊......我的壞......我想反過來去比較......但是這並沒有解決這個問題,我得到了如此多的值:-S喜歡輸入:'「你好」,「世界「,」rld「,」ell「,」hell「,我想與''hello wordl!'比較',我得到輸出'0 6 8 1 0 0 6 8 1 0 0 8 8 1 0 0 6 8 1 0' – Dworza