2013-08-29 73 views
6

我有一些功能傳遞一個迭代器和載體功能

void print_elem(const std::vector<int>::iterator it, const std::vector<int> &vec) {/*.....*/} 

如果我離開了,該向量是對原始對象的引用,我得到的載體的拷貝。爲什麼迭代器不一樣呢?爲什麼迭代器不需要也是一個參考?

例如,如果我想遍歷矢量,打印每個元素,並希望停止當我擊中矢量的末尾,除非我通過一個引用的矢量迭代只是不斷迭代通過第一個矢量副本。但是,如果我通過參考,則迭代會通過原始矢量對象。但是爲什麼迭代器不能像沒有引用的向量那樣被複制呢?

回答

10

迭代器建模一個指針,它很可能是之一,或者包含指向矢量或其內容的指針。當你複製它時,副本實際上是一個不同的迭代器,但它存儲的是相同的值,所以它仍然指向相同的東西,就像指針一樣。

+0

那麼將一個迭代器作爲參考參數傳遞是否無關緊要?注意傳遞一個迭代器作爲函數的引用會導致錯誤是很有價值的;但它不是const_iterator時的情況。你碰巧知道爲什麼?造成後者的差異不是一個錯誤? -謝謝。 – jlstr