如果我有一个 container std::vector<T*> items
,我可以创建一个IndirectIterator
which 包装std::vector<T*>::iterator
并允许迭代T
's 而不是T*
's。
我可以专门iter_swap
制作IndirectIterator
标准算法(例如std::sort
)通过指针交换项目吗?
即,如果我写以下内容,它会对标准算法产生影响吗?
namespace some_namespace
{
template <typename IterT>
class IndirectIterator
{
IterT m_base;
public:
typedef IterT base_iterator;
typedef /* ... */ reference;
/* ... */
reference operator*() const { **m_base; }
const base_iterator& base() const { return m_base; }
base_iterator& base() { return m_base; }
};
template <typename T>
void iter_swap(IndirectIterator<T>& a, IndirectIterator<T>& b)
{
using std::iter_swap;
iter_swap(a.base(), b.base());
}
}
这种专业化的好处是它交换指针而不是完整的 T 实例,因此它更快(可能)。