• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed STL for_each funkcja

Object Storage Arubacloud
0 głosów
72 wizyt
pytanie zadane 7 listopada 2020 w C i C++ przez TOWaD Mądrala (5,700 p.)
zamknięte 7 listopada 2020 przez TOWaD

żeby nie przekopać znów połowę Internetu czy jest możliwe użycie funkcji z wieloma parametrami do for_each 

np.

//to działa bez zarzutu
class Random_Int_srand {
    int sub,sup;
public:
    Random_Int_srand (int Sub, int Sup):sub(Sub),sup(Sup) {
        srand(time(NULL));
    }
    int operator()(int &it) {
        it=rand()%(sup-sub)+sub;
        return it;
    }
} 

Random_Int_srand Trand_C(a,b);
    std::for_each(begin(V5liczb),end(V5liczb),Trand_C);
    std::copy(begin(V5liczb),end(V5liczb),ostream_iterator<int>(cout,",\t"));

// ale z funkcją dla for_each już nie wiem jak postąpić 

int f(int a=17, int b=24) {
    static std::random_device seed;
    static std::mt19937 engine(seed());
    std::uniform_int_distribution<int> dist(a,b);
    return dist(engine);
}

  std::for_each(begin(V5liczb),end(V5liczb),????????????????);

Nie chodzi mi o lambdę, bo to wiem tylko "zwykłą" funkcję z wieloma parametrami (int &, int sub, int sup).

komentarz zamknięcia: rozwiązane

1 odpowiedź

0 głosów
odpowiedź 7 listopada 2020 przez tangarr Mędrzec (154,860 p.)
wybrane 7 listopada 2020 przez TOWaD
 
Najlepsza

Nie, nie może.

Spójrz na dokumentację tej funkcji https://en.cppreference.com/w/cpp/algorithm/for_each.

Funkcja std::for_each wymaga podania funkcji przyjmującej jeden argument (UnaryFunction).
Skąd funkcja miałaby wiedzieć jak uzupełnić resztę argumentów?

Jeżeli chcesz na siłę użyć funkcji wieloelementowej musisz ręcznie przekazać wartość dla reszty argumentów.
Możesz do tego użyć lambdy lub funkcji bind.

#include <iostream>
#include <algorithm>
#include <functional>

void test(int x, int y, int z) {
    std::cout << "test x=" << x << ", y=" << y << ", z=" << z << std::endl;
}

int main() {
    auto numbers = { 1, 2, 3, 4, 5 };
    std::for_each(numbers.begin(), numbers.end(), std::bind(test, std::placeholders::_1, 100, 200));
}

 

komentarz 7 listopada 2020 przez TOWaD Mądrala (5,700 p.)
edycja 7 listopada 2020 przez TOWaD

Dzięki (Sobota wieczór ciężko się myśli.)

test(int int);
test(int int int) 
// się nie kompiluje, ale to nic nie szkodzi tylko będę musiał o tym pamiętać

 

Podobne pytania

0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 17 maja 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 12 sierpnia 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 118 wizyt
pytanie zadane 1 kwietnia 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)

92,568 zapytań

141,420 odpowiedzi

319,624 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...