目錄
1. 反向迭代器概述
2. 代碼實現分析
3. 關鍵點解析
3.1 模板參數設計
3.2 核心操作實現
4. 使用示例
1. 反向迭代器概述
反向迭代器是STL中一種重要的適配器,它允許我們以相反的順序遍歷容器。本文將詳細講解如何實現一個自定義的反向迭代器模板類。
2. 代碼實現分析
?
namespace tyx
{template<class Iterator, class Ref, class Ptr>struct ReverseIterator{typedef ReverseIterator<Iterator, Ref, Ptr> Self;Iterator _it;// 構造函數ReverseIterator(Iterator it):_it(it){}// 解引用操作符Ref operator*(){Iterator tmp = _it;return *(--tmp);}// 箭頭操作符Ptr operator->(){Iterator tmp = _it;return &(operator*());}// 前置++操作符Self& operator++(){--_it;return *this;}// 前置--操作符Self& operator++(){++_it;return *this;}// 不等比較操作符bool operator!=(const Self& s){return _it != s._it;}};
}
3. 關鍵點解析
3.1 模板參數設計
Iterator
: 正向迭代器類型Ref
: 引用類型(解引用返回類型)Ptr
: 指針類型(箭頭操作符返回類型)
3.2 核心操作實現
解引用操作符:
Ref operator*()
{Iterator tmp = _it;return *(--tmp);
}
- 先復制當前迭代器
- 向前移動一位再解引用
- 因為反向迭代器的邏輯位置比實際存儲位置"超前"一位
箭頭操作符:
Ptr operator->()
{return &(operator*());
}
- 通過解引用操作符獲取引用
- 然后取地址返回
-
迭代器移動:
operator++()
?實際是正向迭代器的--
operator--()
?實際是正向迭代器的++
4. 使用示例
#include <vector>
#include <iostream>int main()
{std::vector<int> v = {1, 2, 3, 4, 5};// 使用自定義反向迭代器tyx::ReverseIterator<std::vector<int>::iterator, int&, int*> rbegin(v.end());tyx::ReverseIterator<std::vector<int>::iterator, int&, int*> rend(v.begin());for(; rbegin != rend; ++rbegin){std::cout << *rbegin << " ";}// 輸出: 5 4 3 2 1return 0;
}