Muokkaavat algoritmit: transform, copy_if, replace
Muunna, suodata ja korvaa alkioita standardialgoritmeilla.
Muokkaavat algoritmit: transform, copy_if, replace on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Muokkaavat algoritmit
Nämä algoritmit kirjoittavat tulosalueelle joko suoraan paikalleen tai kohdeiteraattorin kautta.
std::copy
Kopioi alueen toiseen alueeseen. Tulosalueen on oltava riittävän suuri, tai on annettava lisääjäiteraattori.
#include <algorithm>
#include <iterator>
std::vector<int> src = {1, 2, 3};
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));std::copy_if
Kopioi predikaattia vastaavat alkiot.
std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
std::back_inserter(evens),
[](int x) { return x % 2 == 0; });std::transform
Soveltaa funktiota jokaiseen alkioon ja kirjoittaa tuloksen. Vastaa muiden kielten map-toimintoa.
std::vector<int> v = {1, 2, 3};
std::vector<int> sq;
std::transform(v.begin(), v.end(),
std::back_inserter(sq),
[](int x) { return x * x; });
// sq is {1, 4, 9}Kahden alueen transform
Yhdistää kaksi syötealuetta binäärifunktiolla.
std::vector<int> a = {1, 2, 3};
std::vector<int> b = {10, 20, 30};
std::vector<int> sum;
std::transform(a.begin(), a.end(), b.begin(),
std::back_inserter(sum), std::plus<int>{});
// sum is {11, 22, 33}std::replace ja std::replace_if
Korvaa tiettyä arvoa vastaavat alkiot (tai predikaattia vastaavat alkiot) paikallaan.
std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}std::fill
Asettaa alueen jokaisen alkion tiettyyn arvoon.
std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}std::generate
Asettaa jokaiselle alkiolle funktion kutsun tuloksen. Hyödyllinen sekvenssien luomisessa.
std::vector<int> v(5);
int n = 0;
std::generate(v.begin(), v.end(), [&]() { return n++; });
// v is {0, 1, 2, 3, 4}std::iota
Kirjastosta <numeric> — täyttää alueen peräkkäin kasvavilla arvoilla.
#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}std::reverse
Kääntää alueen alkiot päinvastaiseen järjestykseen paikallaan.
std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}std::rotate
Kiertää alkioita niin, että middle-kohdassa oleva alkio muuttuu uudeksi ensimmäiseksi alkioksi. Alkuperäinen ensimmäinen alkio siirtyy kierretun alueen loppuun.
Erase-Remove std::remove-kutsulla
remove siirtää tarpeettomat alkiot loppuun ja palauttaa iteraattorin uuteen loogiseen loppuun. Käytä sitä yhdessä erase-funktion kanssa, jotta säilö oikeasti pienenee.
v.erase(
std::remove(v.begin(), v.end(), 0),
v.end()
);Pikatarkistus
Mikä algoritmi sopii parhaiten tehtävään ”sovelletaan funktiota jokaiseen alkioon ja muodostetaan uusi säilö”?
Kertaus
Muokkaavat algoritmit kirjoittavat tuloksia: copy, copy_if, transform, replace, fill, generate, iota, reverse, rotate sekä erase-remove-idiomi.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Muokkaavat algoritmit: transform, copy_if, replace” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Muokkaavat algoritmit: transform, copy_if, replace”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Muokkaavat algoritmit: transform, copy_if, replace”?
Muunna, suodata ja korvaa alkioita standardialgoritmeilla. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Muokkaavat algoritmit: transform, copy_if, replace”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Muuttamattomat algoritmit: find, count, all_of
- Muokkaavat algoritmit: transform, copy_if, replace
- Järjestäminen ja osittaminen: sort, stable_partition
- Numeeriset algoritmit: accumulate, reduce, transform_reduce