Jadi, saya menulis banyak kode yang mengakses elemen dalam vektor stl dengan indeks [], tapi sekarang saya perlu menyalin hanya sepotong vektor. Sepertinya vector.insert(pos, first, last)
fungsi yang saya inginkan ... kecuali saya hanya punya pertama dan terakhir sebagai int. Apakah ada cara yang baik saya bisa mendapatkan iterator dengan nilai-nilai ini?
200
Jawaban:
Coba ini:
sumber
std::next(v.begin(), index)
cara yang disebutkan oleh @ sangat
( v.begin() + index )
bagus dan cepat untuk vektortetapi cara yang paling umum dan untuk iterator akses acak bekerja waktu konstan juga.
std::advance
( v.begin(), index )
Perbedaan penggunaan EDIT :
atau
ditambahkan setelah catatan @litb.
sumber
std::vector
, tidak ada gunanya menggunakanstd::advance
. Ini hanya memikat Anda untuk berpikir Anda sedang menulis kode container-agnostik (yang tidak Anda lakukan, memikirkan aturan pembatalan iterator, kompleksitas runtime yang berbeda dan yang lainnya). Satu-satunya kasus ketikastd::advance
masuk akal adalah ketika Anda menulis template sendiri yang tidak tahu jenis iterator yang berurusan dengannya.Juga;
auto it = std::next(v.begin(), index);
Pembaruan: Membutuhkan kompiler yang memenuhi persyaratan C ++ 11x
sumber
Atau bisa Anda gunakan
std::advance
sumber
Sebenarnya std :: vector dimaksudkan untuk digunakan sebagai tab C saat dibutuhkan. (C ++ permintaan standar untuk implementasi vektor, sejauh yang saya tahu - penggantian untuk array di Wikipedia ) Sebagai contoh, adalah sah untuk melakukan hal ini, menurut saya:
Tentu saja, baik foo tidak boleh menyalin alamat yang dilewatkan sebagai parameter dan menyimpannya di suatu tempat, atau Anda harus memastikan dalam program Anda untuk tidak pernah mendorong item baru dalam vec, atau meminta untuk mengubah kapasitasnya. Atau kesalahan segmentasi risiko ...
Karena itu dalam contoh Anda itu mengarah ke
sumber