• 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

0 głosów
185 wizyt
pytanie zadane 7 listopada 2020 w C i C++ przez TOWaD Mądrala (6,800 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 (155,140 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 (6,800 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ź 264 wizyt
pytanie zadane 17 maja 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 265 wizyt
pytanie zadane 12 sierpnia 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 239 wizyt
pytanie zadane 1 kwietnia 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,322 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...