Jadi saya punya daftar:
list<Object> myList;
myList.push_back(Object myObject);
Saya tidak yakin tapi saya yakin ini akan menjadi elemen "ke 0" dalam array. Apakah ada fungsi yang dapat saya gunakan yang akan mengembalikan "myObject"?
Object copy = myList.find_element(0);
?
vector
saja?front()
.Jawaban:
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
ataustd::deque
mungkin lebih baik.Karena itu, Anda bisa mendapatkan iterator ke elemen ke-N menggunakan
std::advance
:Untuk penampung yang tidak menyediakan akses acak, seperti
std::list
,std::advance
panggilanoperator++
pada waktu iteratorN
. Atau, jika implementasi Perpustakaan Standar Anda menyediakannya, Anda dapat memanggilstd::next
:std::next
secara efektif membungkus panggilan kestd::advance
, membuatnya lebih mudah untuk memajukan waktu iteratorN
dengan lebih sedikit baris kode dan lebih sedikit variabel yang bisa berubah.std::next
ditambahkan di C ++ 11.sumber
std::advance
ataustd::next
, mudah untuk memanggil UB. Tidak ada pemeriksaan batas.std::list
tidak menyediakan fungsi apa pun untuk mendapatkan elemen yang diberi indeks. Anda dapat mencoba mendapatkannya dengan menulis beberapa kode, yang tidak saya rekomendasikan, karena itu tidak akan efisien jika Anda sering perlu melakukannya.Yang Anda butuhkan adalah:
std::vector
. Gunakan sebagai:sumber
sumber
Mungkin bukan cara yang paling efisien. Tapi Anda bisa mengubah daftar menjadi vektor.
Kemudian akses vektor menggunakan operator [x].
Anda bisa memasukkannya ke dalam fungsi pembantu:
Kemudian gunakan fungsi helper seperti ini:
sumber