コンテナがある場合は、ラップして'sではなく'sを反復処理できるstd::vector<T*> items
anを作成できます。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インスタンスではなくポインターを交換するため、(潜在的に)高速になることです。