... pasti bermanfaat untuk memiliki opsi melewati rentang. Tapi setidaknya dalam pengalaman saya, itu adalah kasus khusus yang langka. Saya biasanya ingin beroperasi di seluruh wadah
Ini mungkin kasus khusus yang langka dalam pengalaman Anda , tetapi dalam kenyataannya seluruh wadah adalah kasus khusus, dan kisaran sewenang - wenang adalah kasus umum.
Anda telah memperhatikan bahwa Anda dapat mengimplementasikan seluruh wadah menggunakan antarmuka saat ini, tetapi Anda tidak dapat melakukan yang sebaliknya.
Jadi, penulis perpustakaan memiliki pilihan antara mengimplementasikan dua antarmuka di muka, atau hanya mengimplementasikan satu yang masih mencakup semua kasus.
Sangat mudah untuk menulis fungsi pembungkus yang mengambil wadah dan panggilan mulai () dan mengakhiri () di atasnya, tetapi fungsi kenyamanan tersebut tidak termasuk dalam perpustakaan standar
Benar, terutama karena fungsi gratis std::begin
dan std::end
sekarang disertakan.
Jadi, katakanlah perpustakaan menyediakan kenyamanan berlebih:
template <typename Container>
void sort(Container &c) {
sort(begin(c), end(c));
}
sekarang ini juga perlu menyediakan kelebihan yang setara dengan mengambil fungsi perbandingan, dan kami perlu menyediakan yang setara untuk setiap algoritma lainnya.
Tapi setidaknya kita membahas setiap kasus di mana kita ingin beroperasi pada wadah penuh, kan? Ya tidak cukup. Mempertimbangkan
std::for_each(c.rbegin(), c.rend(), foo);
Jika kita ingin menangani pengoperasian mundur pada wadah, kita memerlukan metode lain (atau pasangan metode) per algoritma yang ada.
Jadi, pendekatan berbasis rentang lebih umum dalam arti sederhana bahwa:
- itu bisa melakukan semua yang versi seluruh-kontainer bisa
- pendekatan seluruh-kontainer menggandakan atau tiga kali lipat jumlah kelebihan yang dibutuhkan, sementara masih kurang kuat
- algoritme berbasis rentang juga dapat disusun (Anda dapat menumpuk atau menghubungkan adapter iterator, meskipun ini lebih umum dilakukan dalam bahasa fungsional dan Python)
Ada alasan sah lainnya, tentu saja, yaitu karena sudah banyak pekerjaan untuk mendapatkan standar STL, dan menggelembungkannya dengan pembungkus yang nyaman sebelum digunakan secara luas tidak akan banyak menggunakan waktu komite yang terbatas. Jika Anda tertarik, Anda dapat menemukan laporan teknis Stepanov & Lee di sini
Seperti disebutkan dalam komentar, Boost.Range memberikan pendekatan yang lebih baru tanpa memerlukan perubahan standar.