Algorytmy fill() i fill_n() umożliwiają zastąpienie wybranej liczny elementów z kolekcji.
#include<algorithm>
template < class ForwardIterator, class T > void fill ( ForwardIterator first, ForwardIterator last, const T& value ) { while (first != last) *first++ = value; }
template < class OutputIterator, class Size, class T > void fill_n ( OutputIterator first, Size n, const T& value ) { for (; n>0; --n) *first++ = value; }
#include <algorithm> #include <vector> #include <string> #include <iostream> using namespace std; // Prosta klasa służąca do demonstracji class Towar { private: string status; int cena; public: Towar() { status="W sklepie"; cena=100; } Towar(string c,int x) { status=c; cena=x; } void wypisz() { cout<<status<<endl; } };
Przykład pokazuje wykorzystanie obu algorytmów w połączeniu z stworzoną przez nas klasa i wektorem
int main() { //Stworzenie wektora z towarami; vector<Towar> towary; //Tworzenie towarów Towar nieprzeceniony; Towar przeceniony("przecenione",50); Towar zamowiony("zamowione",0); //Dodanie towarów nieprzecenionych do wektora for(unsigned int i=0;i<=5;i++) towary.push_back(nieprzeceniony); cout<<"Lista towarow przed zastosowaniem algorytmów: "<<endl; for(unsigned int i=0;i<=towary.size()-1;i++) towary[i].wypisz(); cout<<endl;
Użycie algorytmu fill do zamiany towarów na przecenione oprócz dwóch ostatnich i wyświetlenie wyników
fill(towary.begin(),towary.end()-2,przeceniony); cout<<"Lista towarow po zastosowaniu algorytmu fill() : "<<endl; for(unsigned int i=0;i<=towary.size()-1;i++) towary[i].wypisz(); cout<<endl;
Użycie algorytmu fill_n do zamiany statusu przech pierwszych towarów na zamowione i wyświetlenie wyników
fill_n(towary.begin(),3,zamowiony); cout<<"Lista towarow po zastosowaniu algorytmu fill_n(): "<<endl; for(unsigned int i=0;i<=towary.size()-1;i++) towary[i].wypisz(); cout<<endl; }