2014-01-25 63 views
0

我們可以創建自前向迭代一個新的reverse_iterator的:爲什麼reverse_iterator無法使用前向迭代器分配新值?

set<int>::iterator fiter = si.begin(); 
set<int>::reverse_iterator rsiter(fiter); 

,但我們不能分配一個新的前向迭代它:

rsiter = fiter; //cannot compile 

有什麼理由呢?

+0

因爲它的構造函數[明確](http://msdn.microsoft.com/en-us/library/h1y7x448.aspx) –

+0

爲什麼reverse_iterator的不支持運營商=(迭代器)? – camino

+0

有關詳細信息,請參閱此文檔:http://en.cppreference.com/w/cpp/iterator/reverse_iterator/reverse_iterator –

回答

0

  1. 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,它只是混淆了接口。

0

reverse_iterator是一個迭代器適配器。

iterator是一個迭代器。

如果您可以將迭代器分配給適配器,那就沒有意義了:它們不是一回事。 C++使我們能夠通過一個迭代器適配器適應:

// adapter rsiter can adapt iterator fiter 
reverse_iterator rsiter(fiter); 
+1

迭代器適配器也是一個迭代器。如果從前向迭代器構造反向迭代器是有意義的,那麼分配它也是有意義的。這是一個設計選擇,而不是一個有意義/無意義的問題。 –

0

正如David Rodríguez - dribeas說,在他的評論中,沒有必要重載賦值運算符時,你可以使用拷貝賦值運算符。 auto以減少打字。

auto rsiter = std::set<int>::reverse_iterator(fiter); 
相關問題