中實現標準迭代器我有一些通常使用標準容器作爲基礎字段的類。例如,我有一個類如何在類
template <typename T>
class Vec_3D
{
public:
/* ... */
std::array<T, 3> vec;
/* ... */
};
它只有一個變量vec
,其餘都只是功能與向量工作時,我需要的。我希望能夠使用的範圍爲基礎的for循環如
Vec_3D<double> vec;
for (double val : vec) {/*...*/}
應obviusly遍歷std::array<double, 3>
。
如何在我的類中實現迭代器,它應該反過來調用迭代器std::array<T, 3>
?
我開始與this question,並試圖在我的課定義爲迭代器
typedef std::iterator<std::random_access_iterator_tag, T, ptrdiff_t, T*, T&> iterator;
typedef std::iterator<std::random_access_iterator_tag, const T, ptrdiff_t, const T*, const T&> const_iterator;
inline iterator begin() noexcept { return vec.begin(); }
inline const_iterator cbegin() const noexcept { return vec.cbegin(); }
inline iterator end() noexcept { return vec.end(); }
inline const_iterator cend() const noexcept { return vec.end(); }
,但得到編譯錯誤
error: no match for ‘operator!=’ (operand types are ‘Vec_3D<double>::iterator {aka std::iterator<std::random_access_iterator_tag, double, long int, double*, double&>}’ and ‘Vec_3D<double>::iterator {aka std::iterator<std::random_access_iterator_tag, double, long int, double*, double&>}’)
和operator++, operator*
'std :: iterator'不是你認爲的那樣 –