我們可以創建自前向迭代一個新的reverse_iterator的:爲什麼reverse_iterator無法使用前向迭代器分配新值?
set<int>::iterator fiter = si.begin();
set<int>::reverse_iterator rsiter(fiter);
,但我們不能分配一個新的前向迭代它:
rsiter = fiter; //cannot compile
有什麼理由呢?
我們可以創建自前向迭代一個新的reverse_iterator的:爲什麼reverse_iterator無法使用前向迭代器分配新值?
set<int>::iterator fiter = si.begin();
set<int>::reverse_iterator rsiter(fiter);
,但我們不能分配一個新的前向迭代它:
rsiter = fiter; //cannot compile
有什麼理由呢?
從
explicit reverse_iterator(Iterator x);
構造函數是explicit
,這意味着它不能做類似隱式調用:
set<int>::reverse_iterator reverse_iterator it = si.begin(); // error
必須始終明確地調用構造函數:
set<int>::reverse_iterator reverse_iterator it(si.begin()); // works
超載operator=()
似乎沒有生產IMO,它只是混淆了接口。
reverse_iterator
是一個迭代器適配器。
iterator
是一個迭代器。
如果您可以將迭代器分配給適配器,那就沒有意義了:它們不是一回事。 C++使我們能夠通過一個迭代器適配器適應:
// adapter rsiter can adapt iterator fiter
reverse_iterator rsiter(fiter);
迭代器適配器也是一個迭代器。如果從前向迭代器構造反向迭代器是有意義的,那麼分配它也是有意義的。這是一個設計選擇,而不是一個有意義/無意義的問題。 –
正如David Rodríguez - dribeas說,在他的評論中,沒有必要重載賦值運算符時,你可以使用拷貝賦值運算符。 auto
以減少打字。
auto rsiter = std::set<int>::reverse_iterator(fiter);
因爲它的構造函數[明確](http://msdn.microsoft.com/en-us/library/h1y7x448.aspx) –
爲什麼reverse_iterator的不支持運營商=(迭代器)? – camino
有關詳細信息,請參閱此文檔:http://en.cppreference.com/w/cpp/iterator/reverse_iterator/reverse_iterator –