據我所知,使用const
和&
以及所有其他奇特的C++東西,正如我聽說Bjarne Stroustrup在視頻中所說的那樣,「幫助編譯器」。我明白如何儘可能地使用&
(引用)可以幫助提高程序的效率,但有一點我不明白的是const_iterator
如何提供幫助。假設我用如何使用const_iterator導致編譯更高效的程序?
#include <string>
#include <iostream>
int main()
{
const std::string s = "Vote for Pat Buchanan in 2016";
for (std::string::const_iterator i1(s.cbegin()), i2(s.cend()); i1 != i2; ++i1)
std::cout << *i1 << std::endl;
return 0;
}
,而不是
#include <string>
#include <iostream>
int main()
{
const std::string s = "Vote for Pat Buchanan in 2016";
for (std::string::iterator i1(s.begin()), i2(s.end()); i1 != i2; ++i1)
std::cout << *i1 << std::endl;
return 0;
}
都是有效的。前者如何更有效率?如何迭代遍歷字符串const_iterator
的速度比使用常規iterator
迭代字符串的速度更快?它們不是相同的數據結構嗎?爲什麼你需要單獨的數據結構來遍歷遍歷整個程序的容器,而不是遍歷一個非常量的容器?
舉例來說,如果我寫我自己的字符串類StringCool
所使用節點
node
{
char c;
node * next, * previous;
}
來遍歷它,我不明白爲什麼我會需要別樣的節點,通過不斷迭代StringCool
的實例。關於StringCool
實例的常量版本唯一不同的是,該類將不允許書寫。我可以給它一個字段的節點
const char c;
const node * next, * previous;
但我不明白如何迭代通過這樣的節點的鏈接列表會更快。
Related question:
在C++中創建類時,是否可以定義在聲明類的實例時會發生什麼const
?
Stroustrup是否真的說'const_iterator'更有效率,還是你外推? – 2014-11-21 14:54:49