2011-01-17 19 views
7

Bir yineleyiciyi (isteğe bağlı) başka bir yineleyicinin (aynı türden) ardılı ile başlatmak istiyorum. Aşağıdaki kod rasgele erişim adım adım elde çalışır, ancak ileri veya çift yönlü adım adım elde başarısız:iterator successor

Iterator i = j; 
++i; 

Ama bu init-stament olarak çalışmaz:

Iterator i = j + 1; 

basit bir çözüm olduğunu bir döngü için. bu gibi kullanmak sonra

template <typename Iterator> 
Iterator succ(Iterator it) 
{ 
    return ++it; 
} 

ve: Ben aşağıdaki gibi bir işlev şablonu kullanabilir

Iterator i = succ(j); 

STL veya Boost böyle bir şey var mı, yoksa daha iyi bir çözüm yoktur ben farkında değil miyim?

+1

Bunu “iterator i = j; ++ i; '' for' döngüsünün içinde mümkün değil - bunu genişletebilir misin? Bir 'for' döngüsünde iyi çalışmalı. –

+0

@Michael: 'x' sözcüğünü, (x; y; z) için, yani döngü gövdesinin içinde değil, demek istedim. – fredoverflow

+0

Görüyorum; bu mantıklı. Bütünlük için –

cevap

14

Sanırım next in Boost.Utility'u arıyorsunuz. Ayrıca, önceki bir öğeye yineleyici almak için prior vardır.

Güncelleme:

std::next ve std::prev tanıtıldı C++ 11.

+0

, ayrıca 'prev' var :) –

+0

@Matthiew M .: Ben daha önce demek istediğini düşünüyorum. Benim bağlantımda. Şimdi cevabımdan bahsetmiştim. –

+0

'next' artık C++ 11'in bir parçasıdır http://en.cppreference.com/w/cpp/iterator/next – alfC

İlgili konular