std::list
Çift bağlantılı bir liste olarak uygulanan bir dizinin N. öğesine sık sık erişmeniz gerekiyorsa , muhtemelen doğru seçim değildir. std::vector
veyastd::deque
da muhtemelen daha iyi olurdu.
Bununla birlikte, aşağıdakileri kullanarak N'inci öğeye bir yineleyici alabilirsiniz std::advance
:
std::list<Object> l;
unsigned N = ;
if (l.size() > N)
{
std::list<Object>::iterator it = l.begin();
std::advance(it, N);
}
Rasgele erişim sağlamaz bir kap için, gibi std::list
, std::advance
aramaları operator++
yineleyici üzerinde N
zamanlarda. Alternatif olarak, Standart Kitaplık uygulamanız sağlıyorsa şunları arayabilirsiniz std::next
:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::next
bir çağrıyı etkili bir şekilde sararak std::advance
, daha N
az kod satırı ve daha az değişken değişkenle yineleyici süreleri ilerletmeyi kolaylaştırır . std::next
C ++ 11'de eklendi.
vector
bunun yerine neden kullanmıyorsunuz ?