コンテナがある場合は、ラップして'sではなく'sを反復処理できるstd::vector<T*> itemsanを作成できます。IndirectIteratorstd::vector<T*>::iteratorTT*
標準のアルゴリズム(など)をポインタでスワップiter_swapすることに特化できますか?IndirectIteratorstd::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インスタンスではなくポインターを交換するため、(潜在的に)高速になることです。