2010-06-21 147 views
1

它需要一定的時間來移動迭代器串的元素在以下幾點:迭代的std :: string元素

std::string str // string of size 100 MB 
std::string::iterator iter = str.begin(); 
std::advance(iter, str.size()-1); 

,將採取一定的時間,如通過索引搜索?

char c = str[str.size()-1]; 
+1

只有當你真的想要變異時才使用string :: iterator。它會觸發寫入時複製,這會導致配置結果混亂。 – pmr 2010-06-21 18:51:12

回答

3

是的,這是正確的。這是由C++標準(§24.3,迭代器操作)保證:

由於只有隨機訪問迭代 提供+和 - 運算符,庫 提供了兩個函數模板 提前和距離。這些函數 模板使用+和 - 用於隨機 訪問迭代器(因此,它們的定時時間爲 );

0

爲什麼地球上你會使用頂部代碼而不是str.end() - 1?

編輯:或str.back(),這是更容器通用。

+0

更多的評論。 :) – GManNickG 2010-06-21 18:48:56

+0

它不依賴iter作爲隨機訪問迭代器。在具體情況下,這並不重要,但如果過於簡化,則可能會發生。 – pmr 2010-06-21 18:49:16