Jika Anda sering perlu mengakses elemen ke-N dari sebuah urutan std::list
, yang diimplementasikan sebagai daftar tertaut ganda, mungkin bukan pilihan yang tepat. std::vector
atau std::deque
mungkin lebih baik.
Karena itu, Anda bisa mendapatkan iterator ke elemen ke-N menggunakan std::advance
:
std::list<Object> l;
// add elements to list 'l'...
unsigned N = /* index of the element you want to retrieve */;
if (l.size() > N)
{
std::list<Object>::iterator it = l.begin();
std::advance(it, N);
// 'it' points to the element at index 'N'
}
Untuk penampung yang tidak menyediakan akses acak, seperti std::list
, std::advance
panggilan operator++
pada waktu iterator N
. Atau, jika implementasi Perpustakaan Standar Anda menyediakannya, Anda dapat memanggil std::next
:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::next
secara efektif membungkus panggilan ke std::advance
, membuatnya lebih mudah untuk memajukan waktu iterator N
dengan lebih sedikit baris kode dan lebih sedikit variabel yang bisa berubah. std::next
ditambahkan di C ++ 11.
vector
saja?