C++ STL algoritmlari
C++ tilida Standart andozalar kutubxonasi (STL) konteyner elementlarini (massivlar, vektorlar va boshqalar) saralash, qidirish va boshqarish kabi operatsiyalarni bajarish uchun ishlatilishi mumkin bo'lgan boy algoritmlar to'plamini taqdim etadi.
Ushbu algoritmlarga <algorithm> sarlavhasi yordamida kirish mumkin.
#include <algorithm>
C++ tilidagi <algorithm> kutubxonasi ko‘plab foydali funksiyalarni taklif etadi. Eng ko'p ishlatiladigan funksiyalardan ba'zilari quyida keltirilgan.
Funksiyalar Tavsif sort() Konteyner elementlarini saralash. copy() Berilgan diapazondagi elementlarni nusxalash. move() Berilgan elementlar diapazonini siljiting. swap() Ikki obyektning qiymatlarini almashish. merge() Saralangan diapazonlarni birlashtirish. replace() Element qiymatini almashtiring. remove() Elementni olib tashlang.
[!NOTE] Ushbu funksiyalarning barchasini tushunish uchun vektorlardan foydalanamiz. Biroq, bu funksiyalar boshqa STL konteynerlarida ham ishlaydi.
Vektorni o'sish tartibida saralash uchun biz sort() funksiyasidan foydalanishimiz mumkin. Uning sintaksisi:
sort( first, last);
Bu yerga,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {4, 2, 3, 1, 5};
// vektor elementlarini tartiblash
sort(vec.begin(), vec.end());
for(int num : vec) {
cout << num << " ";
}
return 0;
}
Chiqish
1 2 3 4 5
Bu erda biz sort() diapazonini vec.begin() yordamida vektorimizning boshidan vec.end() yordamida vektor oxirigacha o'rnatdik.
Bu bizning vektorimizni o'sish tartibida tartiblaydi.
Biz copy() funksiyasidan elementlarning berilgan diapazonini bir vektordan ikkinchisiga ko'chirish uchun foydalanamiz. Uning sintaksisi:
copy(first, last, result);
Bu yerga,
Masalan,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> source = {1, 2, 3, 4, 5};
// 5 o'lchamdagi maqsad vektorini yarating
vector<int> destination(5);
// manba mazmunini belgilangan joyga nusxalash
copy(source.begin(), source.end(), destination.begin());
// maqsad vektorining chop etish elementlari
for(int num : destination) {
cout << num << " ";
}
return 0;
}
Chiqish
1 2 3 4 5
Bu erda biz besh elementli manba va 5 o'lchamdagi bo'sh vektor manzilini yaratdik.
Keyin manba mazmunini manzilga nusxalash uchun copy() funksiyasidan foydalandik.
Elementlarni bir vektordan ikkinchisiga ko'chirish uchun move() funksiyasidan foydalanishimiz mumkin. Uning sintaksisi:
move(first, last, result);
Masalan,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<string> source = {"apple", "banana", "cherry"};
vector<string> destination(3);
cout << "Before move:" << endl;
cout << "source: ";
for(const string& str : source) {
cout << str << " ";
}
cout << endl;
cout << "destination: ";
for(const string& str : destination) {
cout << str << " ";
}
cout << endl;
// harakatlanish operatsiyasini bajaring
move(source.begin(), source.end(), destination.begin());
cout << "After move:" << endl;
cout << "source: ";
for(const string& str : source) {
cout << str << " ";
}
cout << endl;
cout << "destination: ";
for(const string& str : destination) {
cout << str << " ";
}
cout << endl;
return 0;
}
Chiqish
Before move:
source: apple banana cherry
destination:
After move:
source:
destination: apple banana cherry
swap() funksiyasidan foydalanib, ikkita STL vektorining mazmunini almashtirishimiz mumkin. Uning sintaksisi:
swap(x, y);
Bu erda x va y - tarkibini almashtirish kerak bo'lgan konteynerlar.
Masalan,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec1 = {1, 2, 3};
vector<int> vec2 = {4, 5, 6};
// almashtirishdan oldin vec1 va vec2 ni chop eting
cout << "Before swap:" << endl;
cout << "vec1: ";
for(int num : vec1) {
cout << num << " ";
}
cout << endl;
cout << "vec2: ";
for(int num : vec2) {
cout << num << " ";
}
cout << endl;
// vec1 va vec2-ni almashtiring
swap(vec1, vec2);
// almashtirishdan keyin vec1 va vec2 ni chop eting
cout << "After swap:" << endl;
cout << "vec1: ";
for(int num : vec1) {
cout << num << " ";
}
cout << endl;
cout << "vec2: ";
for(int num : vec2) {
cout << num << " ";
}
cout << endl;
return 0;
}
Chiqish
Before swap:
vec1: 1 2 3
vec2: 4 5 6
After swap:
vec1: 4 5 6
vec2: 1 2 3
merge() funksiyasidan foydalanib ikkita STL konteynerini birlashtira olamiz. Uning sintaksisi:
merge(first1, last1, first2, last2, result);
Bu yerga,
Masalan,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec1 = {1, 3, 5};
vector<int> vec2 = {2, 4, 6};
vector<int> result(6);
// vec1 va vec2 birlashmasidan oldin
cout << "Before merge:" << endl;
cout << "vec1: ";
for(int num : vec1) {
cout << num << " ";
}
cout << endl;
cout << "vec2: ";
for(int num : vec2) {
cout << num << " ";
}
cout << endl;
// birlashtirish operatsiyasini bajarish
merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), result.begin());
// birlashgandan keyin chiqish natijasi
cout << "After merge:" << endl;
cout << "result: ";
for(int num : result) {
cout << num << " ";
}
cout << endl;
return 0;
}
Chiqish
Before merge:
vec1: 1 3 5
vec2: 2 4 6
After merge:
result: 1 2 3 4 5 6
E'tibor bering, birlashtirilgan vektor tartiblangan tartibda qaytariladi.
replace() funksiyasidan foydalanib, biz STL konteyneridagi barcha elementni boshqa element bilan almashtira olamiz. Uning sintaksisi:
replace(first, last, old_value, new_value);
Bu yerga,
Masalan,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {4, 2, 3, 2, 5};
// almashtirishdan oldin vektorni ko'rsatish
cout << "Before: ";
for(int num : vec) {
cout << num << " ";
}
cout << endl;
// 2 ni 99 bilan almashtiring
replace(vec.begin(), vec.end(), 2, 99);
// almashtirilgandan keyin vektorni ko'rsatish
cout << "After: ";
for(int num : vec) {
cout << num << " ";
}
cout << endl;
return 0;
}
Chiqish
Before: 4 2 3 2 5
After: 4 99 3 99 5
Bu erda biz 2 ning barcha holatlarini 99 bilan almashtirdik.
remove() funksiyasidan foydalanib, berilgan diapazondan qiymatning birinchi takrorlanishini olib tashlashimiz mumkin. Uning sintaksisi:
remove(first, last, val);
Bu yerga,
Masalan,
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {4, 2, 3, 2, 5};
// o'chirishdan oldin vektorni chop eting
cout << "Before deletion: ";
for(int num : vec) {
cout << num << " ";
}
cout << endl;
// 2 ning birinchi takrorlanishini olib tashlang
remove(vec.begin(), vec.end(), 2);
// o'chirishdan keyin vektorni chop eting
cout << "After deletion: ";
for(int num : vec) {
cout << num << " ";
}
cout << endl;
return 0;
}
Chiqish
Before deletion: 4 2 3 2 5
After deletion: 4 3 5 2 5