2011-01-22 41 views
1

因此,作爲一個課堂作業,我重新實現std::vector,和我在與聲明原型的麻煩:如何聲明返回std iterator的函數原型?

iterator insert (iterator position, const T& x); 

我的迭代器類的模板看起來像這樣

template<typename T> 
class VectorIterator : public std::iterator<std::input_iterator_tag, T> 

模板我Vector類看起來像這樣

template<typename T> 
class Vector 

我怎樣才能申報原型插入返回std::iterator而不是我自己的VectorIterator班?我當然會返回一個我自己的VectorIterator類的實例。

+1

你應該使用`random_access_iterator_tag`作爲`vector`類,而不是`input_iterator_tag`。 – 2011-01-22 19:11:26

回答

4

該函數不返回std::iterator;它返回一個std::vector<T, Alloc>::iterator。你需要的typedef你VectorIteratorVector

template <typename T> 
class Vector { 
    typedef VectorIterator<T> iterator; 
}; 

這是insert函數的返回類型。對std::vector規範中的iteratorconst_iterator的任何引用都是針對您需要提供的類型定義。