Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Algoritma adalah bagian mendasar dari Pustaka Standar C++. Algoritma tidak berfungsi dengan kontainer itu sendiri melainkan dengan iterator. Oleh karena itu, algoritma yang sama dapat digunakan oleh sebagian besar jika tidak semua kontainer Pustaka Standar C++. Bagian ini membahas konvensi dan terminologi algoritma Pustaka Standar C++.
Keterangan
Deskripsi templat fungsi algoritma menggunakan beberapa frasa singkat:
Frasa "dalam rentang [A, B)" berarti urutan nol atau lebih nilai diskrit yang dimulai dengan A hingga tetapi tidak termasuk B. Rentang hanya valid jika B dapat dijangkau dari A, Anda dapat menyimpan A di objek N (N = A), Anda dapat menaikkan objek nol atau lebih kali (++N), dan memiliki objek dibandingkan dengan B setelah jumlah kenaikan terbatas (N == B).
Frasa "setiap N dalam rentang [A, B)" berarti bahwa N dimulai dengan nilai A dan ditahapkan nol atau lebih kali sampai sama dengan nilai B. Kasus N == B tidak dalam rentang.
Frasa "nilai terendah N dalam rentang [A, B) sehingga X" berarti bahwa kondisi X ditentukan untuk setiap N dalam rentang [A, B) hingga kondisi X terpenuhi.
Frasa "nilai tertinggi N dalam rentang [A, B) sehingga X" berarti bahwa X ditentukan untuk setiap N dalam rentang [A, B). Fungsi ini menyimpan dalam K salinan N setiap kali kondisi X terpenuhi. Jika ada penyimpanan seperti itu terjadi, fungsi menggantikan nilai akhir N, yang sama dengan B, dengan nilai K. Namun, untuk iterator akses dua arah atau acak, itu juga dapat berarti bahwa N dimulai dengan nilai tertinggi dalam rentang dan dikurangi di atas rentang hingga kondisi X terpenuhi.
Ekspresi seperti X - Y, di mana X dan Y dapat menjadi iterator selain iterator akses acak, dimaksudkan dalam arti matematika. Fungsi ini tidak selalu mengevaluasi operator - jika harus menentukan nilai seperti itu. Hal yang sama juga berlaku untuk ekspresi seperti X + N dan X - N, di mana N adalah jenis bilangan bulat.
Beberapa algoritma menggunakan predikat yang melakukan perbandingan berpasangan, seperti dengan operator==
, untuk menghasilkan bool
hasil. Fungsi operator==
predikat , atau penggantian apa pun untuk itu, tidak boleh mengubah salah satu operannya. Ini harus menghasilkan hasil yang sama bool
setiap kali dievaluasi, dan harus menghasilkan hasil yang sama jika salinan salah satu operan diganti untuk operand.
Beberapa algoritma menggunakan predikat yang harus memberlakukan urutan lemah yang ketat pada pasangan elemen dari urutan. Untuk predikat pred(X, Y):
Ketat berarti pred(X, X) salah.
Lemah berarti bahwa X dan Y memiliki urutan yang setara jika!pred(X, Y) && & !pred(Y, X) (X == Y tidak perlu ditentukan).
Pemesanan berarti pred(X, Y) && pred(Y, Z) menyiratkan pred(X, Z).
Beberapa algoritma ini secara implisit menggunakan predikat X<Y. Predikat lain yang biasanya memenuhi persyaratan pemesanan yang lemah yang ketat adalah X>Y, less
(X, Y), dan greater
(X, Y). Namun, perhatikan bahwa predikat seperti X<= Y dan X>= Y tidak memenuhi persyaratan ini.
Urutan elemen yang ditunjuk oleh iterator dalam rentang [First
, ) adalah urutan yang diurutkan oleh operator <
jika, untuk setiap N dalam rentang [0, Last
First
- ) dan untuk setiap M dalam rentang (N, Last
First
- ) predikat !( Last
*(First
+ M) < *(First
+ N)) benar. (Perhatikan bahwa elemen diurutkan dalam urutan naik.) Fungsi operator<
predikat , atau penggantian apa pun untuk itu, tidak boleh mengubah salah satu operannya. Ini harus menghasilkan hasil yang sama bool
setiap kali dievaluasi, dan harus menghasilkan hasil yang sama jika salinan salah satu operan diganti untuk operand. Selain itu, itu harus memaksakan urutan lemah yang ketat pada operan yang dibandingkan.
Urutan elemen yang ditunjuk oleh iterator dalam rentang [First
, ) adalah tumpukan yang diurutkan oleh operator<
jika, untuk setiap N dalam rentang [1, Last
- First
) predikat !( Last
*Pertama< *(First
+ N)) benar. (Elemen pertama adalah yang terbesar.) Struktur internalnya hanya diketahui oleh fungsi make_heap
templat , , pop_heap
dan push_heap
. Seperti urutan yang diurutkan, fungsi operator<
predikat , atau penggantian apa pun untuk itu, tidak boleh mengubah salah satu operannya, dan harus memaksakan urutan lemah yang ketat pada operan yang dibandingkan. Ini harus menghasilkan hasil yang sama bool
setiap kali dievaluasi, dan harus menghasilkan hasil yang sama jika salinan salah satu operan diganti untuk operand.
Algoritma Pustaka Standar C++ terletak di <algorithm>
file header dan <numeric>
.
Lihat juga
Referensi pustaka standar C++
Keamanan utas di Pustaka Standar C++