【发布时间】:2012-08-26 23:42:05
【问题描述】:
如果我有一个容器 std::vector<T*> items,我可以创建一个 IndirectIterator 包装 std::vector<T*>::iterator 并允许迭代 T 而不是 T*。
我可以将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 实例,因此它更快(可能)。
【问题讨论】:
标签: c++ algorithm vector c++11 containers