2010-03-03 23 views

回答

6

簡短的答案是否定的。長的答案是,因爲迭代器不需要知道正在迭代的容器或範圍,所以它們只能預測爲

  • 能夠跳轉到下一個元素(inc或dec到next或prev )
  • 解除引用本身以便揭示它們指向的值的參考
  • 並且過程將自己與其他迭代器進行比較,最重要的是某種「結束」迭代器。

此外,某些類型的迭代器可能做的不僅僅是上面的內容,而是主要是它們都被要求以某種形式執行/執行上述操作。

+0

是的,你definitly需要迭代指着結束還是開始比較你的當前迭代器,當你定義字符串時可以確定的東西? – DogDog 2010-03-03 04:32:51

1
  • 對於字符串的結束點: 假定內部字符串是空終止。然後通過取消引用迭代器來查看它們是否爲'\ 0'來確定下一個位置是結束點。但對於其他非空終止的字符串,不可能知道這些信息。
  • 對於字符串的開始點: 沒辦法做這樣的事情。

默認的std :: string :: iterator只是一個隨機的雙向迭代器,並不知道容器的任何內容。

但是,如果你在的Visual C++平臺上工作,也許你可以使用一些黑客攻擊方式像下面得到控制,它的容器,但它是非常危險的:

// it is the passed in string::iterator parameter. 
    if (it._Has_container()) { 
     string* strRef = (string*)it._Mycont; 
    } 
相關問題