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::vectorveyastd::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::advancearamaları operator++yineleyici üzerinde Nzamanlarda. 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::nextbir çağrıyı etkili bir şekilde sararak std::advance, daha Naz kod satırı ve daha az değişken değişkenle yineleyici süreleri ilerletmeyi kolaylaştırır . std::nextC ++ 11'de eklendi.
vectorbunun yerine neden kullanmıyorsunuz ?