Witam, akurat staram się zrobić pewne zadanie, ale jako że z niektórymi rzeczami mam problem to prosiłbym o wyjaśnienie jak to zrobić. Wymienię problemy które mam z zadaniem.
Po pierwsze jak zdefiniować strukturę Rect tak by robiła to czego chcą w zadaniu, zadeklarowałem punkty w strukturze ale nie wiem jak to dalej zrobić. Dalej mam problem z vectorem, zadeklarowałem go i starałem się potem dodać do niego jakieś polecenia w środku ale że w argumentach funkcji process znajduje się argument function to nie chce mi działać. Function próbowałem utworzyć jako osobną klasę, ale to i tak wyskakuje błąd. Tutaj niżej jest treść zadania.
Zdefiniuj strukturę Point z polami x i y (typu double) odpowiadającymi współrzędnym na płaszczyźnie kartezjańskiej. Zdefiniuj też strukturę Rect opisującą prostokąty na płaszczyźnie kartezjańskiej z bokami równoległymi do osi, polami tej struktury są dwa punkty będące lewym-górnym i prawym-dolnym wierzchołkiem prostokąta. Napisz funkcję:
std::vector<double> process(const Rect* rects, size_t sz, std::function<double(Rect)> f);
która pobiera tablicę prostokątów i jej wymiar oraz funkcję typu Rect→double, a zwraca wektor wyników przekształcenia kolejnych prostokątów z tablicy dostarczoną funkcją. Napisz program testujący napisaną funkcję; jako trzeciego argumentu wywołania użyj zarówno lambd jak i wskaźników do własnych funkcji. Jako funkcji transformującej możesz, na przykład, użyć funkcji obliczającej pole prostokąta albo długość jego przekątnej. Wtedy dla prostokątów:
[(0,4),(4,1)], [(−6,3),(6,−2)], [(−7,4),(8,−4)],
wynik powinien być 12, 60, 120 (pola) i 5, 13, 17 (długości przekątnych).
Tutaj jest mój kod:
#include <iostream>
#include <vector>
using namespace std;
struct Point
{
double pointx;
double pointy;
} x, y;
struct Rect
{
double pointx;
double pointy;
double pointz;
} x, y, z;
void function();
vector<double> process(const Rect* rects, size_t sz, function<double(Rect)> f);
int main()
{
}
void function()
{
}
vector<double> process(const Rect* rects, size_t sz, function<double(Rect)> f)
{
return vector<double>();
}