Jak napisać funkcję przyjmującą tablicę i lambdę

0

Napisz funkcję some, która przyjmuje tablicę oraz funkcję lambda. Funkcja some powinna dla każdego elementu tablicy wykonać funkcję lambda, jeśli choć dla jednego elementu tablicy funkcja lambda zwróci true wynik funkcji some powinien być równy true. Jeśli dla wszystkich elementów tablicy funkcja lambda zwróci false wynik funkcji some powinien być równy false. Napisz funkcję main gdzie przetestujesz napisane funkcje.

Nie wiem od czego zacząć...

2

Napisz sobie osobno funkcje, jedną przyjmującą tablicę i jedną przyjmującą lambdę. Potem połącz je w jedną. Potem zaimplementuj wymagane działanie.

0

//funckja przechowywująca tablice ,czy tak powinna wyglądać ?
int tablica(int tab[]){

for(int i=0; i<3; i++)
{
	tab[i]=i+1;
}

}

1

Nie wiem czego oczekuje prowadzący. Przez przyjęcie tablicy oczekiwałbym przyjęcie C-tablicy przez referencję albo przyjęcie std::array (również przez referencję).

0

Co powiesz na takie rozwiązanie ?

int funkcja(int tablica[] , size_t n){
for(int i=0; i<n;i++){

}

}

Czy lepiej może z wykorzystaniem wskaźnika ?
int funkcja(int *tablica , size_t n){
for(int i=0; i<n;i++){

	tablica = new int[i];
	
}

}

1

int* array to z grubsza to samo co int array[]
jesli to C++ to uzyj std::array

Ale zapis tablica[i] = new int[i]; jest niepoprawny bo tablica to wskaznik na inta a nie na wskaznik

Edit: zle przeczytalem. Jest poprawny ale po pierwsze to bez sensu a po drugie masz wycieki pamieci bo nie robisz free tylko podmieniasz wskaznik

0

ok , w takim razie zostaje przy:
bool funkcja(int tablica[] , size_t n){
for(int i=0; i<n;i++){

}
}

natomiast jak napisać funkcje lambda ?
Po prostu
auto lambda = [] (int a)
{

};

1

Ale formatuj kod prosze...
Opakuj kod zrodlowy z gory i z dolu w trzy tyldy

0

Zobacz sobie jak wygląda funkcja some w Javascript, bo widzę, że wykładowcy nawet się nie chce ciekawego zadania wymyślić.

0

Jak proponujecie to napisać ? Będę wdzięczny za jaki kolwiek zarys

2

użyj std::any_of jeśli możesz, a jak nie, to napisz swoją funkcję na podstawie std::find_if.
miałeś w ogóle na zajęciach styczność z lambdami lub szablonami? Czy kojarzysz coś z poniższych sygnatur?:

template<typename T, typename Pred>
bool some(std::vector<T>&, Pred&);

lub alternatywnie, bez szablonów:

bool some(std::vector<int>&, std::function<bool(int)>&);

Oczywiście zamiast wektora możesz wstawić std::array, albo C-style array, ale generalnie wektor jest najlepszy.

0

miałem tylko szablony dlatego kojarzę TEMPLATE.

template<typename T, typename Pred>
bool some(std::vector<T>&, Pred&){
for (auto x : vector) //i teraz mogę tak użyć funckji lambda i zwrocic true albo false ?
{

}

0

po prostu wywołaj lambdę dla każdej wartości w kontenerze, tak jak wywołujesz normalną funkcję, z tym, że musisz się jakoś odwołać do tej lambdy i kontenera więc nazwij je xD

auto result = p(x); //Pred &p !!

sprawdź czy przekazany argument spełnia warunek w lambdzie i w zależności od rezultatu podejmij jakieś działanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1