algorithm library (tsz. algorithm libraries)
algorithm
könyvtára egy hatékony eszközkészlet az adatok kezelésére, rendezésére, keresésére és egyéb algoritmikus műveletekre. Az algoritmusok általában az STL (Standard Template Library) konténereivel (pl. vector
, list
, set
) együtt működnek.
#include <algorithm>
A algorithm
könyvtár minden függvénye elérhető az #include <algorithm>
direktíva használatával.
algorithm
Könyvtár Főbb KategóriáiKategória | Gyakori függvények | Leírás |
---|---|---|
Rendezés | sort() , stable_sort() , partial_sort()
|
Elemsorok rendezése |
Keresés | find() , binary_search() , min_element() , max_element()
|
Elemkeresés és minimum/maximum keresés |
Számolás | count() , accumulate()
|
Elemek számlálása és összegzése |
Átalakítás | reverse() , rotate() , transform()
|
Adatok manipulálása |
Eltávolítás | remove() , unique() , erase()
|
Adatok törlése és duplikációk eltávolítása |
A std::sort()
az egyik leggyakrabban használt algoritmus a algorithm
könyvtárban.
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {5, 2, 8, 1, 3};
std::sort(v.begin(), v.end()); // Növekvő sorrend
std::cout << "Rendezett tömb: ";
for (int x : v) std::cout << x << " ";
return 0;
}
Kimenet:
Rendezett tömb: 1 2 3 5 8
std::sort(v.begin(), v.end(), std::greater<int>());
std::partial_sort()
Ha csak a legkisebb N elem kell rendezve:
std::partial_sort(v.begin(), v.begin() + 3, v.end());
std::find()
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {5, 2, 8, 1, 3};
auto it = std::find(v.begin(), v.end(), 8);
if (it != v.end())
std::cout << "Az elem megtalálható a vektorban!" << std::endl;
else
std::cout << "Az elem nincs a vektorban!" << std::endl;
return 0;
}
std::binary_search()
Figyelem! A binary_search()
használata előtt rendezni kell az adatokat!
std::sort(v.begin(), v.end());
bool talalt = std::binary_search(v.begin(), v.end(), 8);
int minElem = *std::min_element(v.begin(), v.end());
int maxElem = *std::max_element(v.begin(), v.end());
std::count()
int darab = std::count(v.begin(), v.end(), 2);
std::accumulate()
#include <iostream>
#include <vector>
#include <numeric> // FONTOS!
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
int osszeg = std::accumulate(v.begin(), v.end(), 0);
std::cout << "A vektor elemeinek összege: " << osszeg << std::endl;
return 0;
}
std::reverse()
std::reverse(v.begin(), v.end());
std::rotate()
std::rotate(v.begin(), v.begin() + 2, v.end()); // Az első 2 elem hátra kerül
std::transform()
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::transform(v.begin(), v.end(), v.begin(), (int x) { return x * x; });
std::cout << "Elemek négyzete: ";
for (int x : v) std::cout << x << " ";
return 0;
}
Eredmény: 1 4 9 16 25
std::remove()
A std::remove()
átrendezi az elemeket, de a vektor méretét nem csökkenti!
v.erase(std::remove(v.begin(), v.end(), 3), v.end());
std::unique()
Figyelem! A std::unique()
csak egymás mellett lévő azonos elemeket távolít el, ezért előbb rendezni kell:
std::sort(v.begin(), v.end());
v.erase(std::unique(v.begin(), v.end()), v.end());
A következő program rendezi, szűri, és összeadja az elemeket:
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
int main() {
std::vector<int> v = {5, 1, 8, 3, 3, 7, 2};
// Rendezés
std::sort(v.begin(), v.end());
// Duplikációk eltávolítása
v.erase(std::unique(v.begin(), v.end()), v.end());
// Összegzés
int osszeg = std::accumulate(v.begin(), v.end(), 0);
// Kiírás
std::cout << "Egyedi elemek: ";
for (int x : v) std::cout << x << " ";
std::cout << "\nÖsszeg: " << osszeg << std::endl;
return 0;
}
Eredmény:
Egyedi elemek: 1 2 3 5 7 8 Összeg: 26
✅ algorithm
könyvtár egy hatékony és optimalizált eszköztár a C++-ban.
✅ Rendezés, keresés, számlálás, manipuláció és törlés könnyedén megvalósítható.
✅ Gyors futási idő (többnyire O(n log n)
vagy O(n)
).
✅ STL konténerekkel együtt működik (pl. vector
, list
, set
).
Ha hatékony és gyors algoritmusokra van szükséged a C++-ban, használd az algorithm
könyvtár függvényeit! 🚀
Category | Examples |
---|---|
Testing conditions | std::all_of , std::any_of , std::none_of , std::is_sorted
|
Search algorithms | std::find , std::find_if , std::search , std::adjacent_find
|
Counting | std::count , std::count_if
|
Comparison | std::equal , std::mismatch , std::lexicographical_compare
|
Modifying operations | std::copy , std::swap , std::transform , std::replace
|
Remove/unique | std::remove , std::remove_if , std::unique , std::unique_copy
|
Reordering | std::reverse , std::rotate , std::shuffle , std::sort , std::partition
|
Heap operations | std::make_heap , std::push_heap , std::pop_heap , std::sort_heap
|
Set operations | std::set_union , std::set_intersection , std::set_difference , std::set_symmetric_difference
|
Bounds & sorting helpers | std::lower_bound , std::upper_bound , std::nth_element , std::partial_sort
|
Min/max | std::min , std::max , std::minmax , std::min_element , std::max_element
|
Permutations | std::next_permutation , std::prev_permutation
|
Others | std::merge , std::inplace_merge , std::includes
|