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

Podstawa programowania obiektowego - jak znalezc najmniejszy element

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 3 maja 2017 w C i C++ przez heros22pt Użytkownik (950 p.)

Jestem początkujący jeśli chodzi o programowanie obiektowe. Stworzyłem klasę cWykres dziedziczącą po cFigura. Jak wyszukać najmniejszą/ największą wartość vektora v?

#ifndef	C_WYKRES
#define C_WYKRES

#include<iostream>
#include<vector>
#include "figura.h"
using namespace std;

struct punkt2d
{
	float x, y;
};

class cWykres :cFigura
{
private:
	vector<punkt2d> v;
	float x1, y1;
	string linia;

public:
	float xMin();
	float yMin();
	float xMax();
	float yMax();

	cWykres &operator<<(punkt2d);
};


#endif

czy trzeba tworzyć obiekt globalny?

komentarz 3 maja 2017 przez mokrowski Mędrzec (155,460 p.)
Pozostaje jeszcze zadecydować w jakim przypadku dany punkt jest większy od innego punktu? Suma x i y, odległość kartezjańska do początku układu współrzędnych, inna... ?

1 odpowiedź

0 głosów
odpowiedź 3 maja 2017 przez criss Mędrzec (172,590 p.)
wybrane 3 maja 2017 przez heros22pt
 
Najlepsza

Skorzystaj z lambdy i std::min_element. Tylko nie wiem jaki jest związek między programowaniem obiektowym i twoim pytaniem :P

komentarz 3 maja 2017 przez heros22pt Użytkownik (950 p.)
taki, że nie mogę odwołać się w funkcji która ma zwracać float miny do wektora .. Nie wiem dla czego.
komentarz 3 maja 2017 przez heros22pt Użytkownik (950 p.)
bool predykat_xMin(punkt2d a, punkt2d b)
{
	if (a.x < b.x) return true;
	else return false;
}
float cWykres::xMin()
{
	punkt2d a;
	a= min_element(v.begin(), v.end(), predykat_xMin);
	return a.x;
}

To np. nie działa... podkreśla mi "="

komentarz 3 maja 2017 przez criss Mędrzec (172,590 p.)
Specjalnie dałem ci link do dokumentacji.

min_element zwraca iterator
komentarz 3 maja 2017 przez criss Mędrzec (172,590 p.)

Btw. cały ten kod można zapisać tak:

float cWykres::xMin()
{
   return std::min_element(v.begin(), v.end(), [](const punkt2d & a, const punkt2d & b) { return a.x < b.x; })->x;
}

I jeszcze (tak swoją drogą):

Niepotrzebnie rozwklekłeś kod w predykat_xMin. No i argumenty lepiej zeby przyjmował przez referencje (żeby zapobiec nieptrzebnemy kopiowaniu). Mogłoby to wyglądać tak:

bool predykat_xMin(const punkt2d & a, const punkt2d & b)
{
    return a.x < b.x;
}

Druga sprawa: skoro predykat_xMin przydaje się tylko w tym miejscu, to lepiej żeby nie był widoczny dla reszty kodu. Także jeśli jest zadeklarowany w headerze, to wyrzucić tą deklaracje a w pliku *.cpp dodać słowo static:

static bool predykat_xMin(const punkt2d & a, const punkt2d & b)
{
    return a.x < b.x;
}

albo nowsze rozwiązanie (c++11) - bezimienny namespace. Słuzy do tego samego:

namespace {
bool predykat_xMin(const punkt2d & a, const punkt2d & b)
{
    return a.x < b.x;
}
}

Dzięki temu predykat_xMin będzie widoczny tylko w tej jednostce translacji (w tym pliku).

komentarz 3 maja 2017 przez heros22pt Użytkownik (950 p.)
dzięki, ratujesz mnie.. niestety mam problem z tymi iteratorami, ale po tym co napisałeś sporo się objaśniło!

Podobne pytania

0 głosów
1 odpowiedź 155 wizyt
–1 głos
1 odpowiedź 230 wizyt
pytanie zadane 13 kwietnia 2016 w C i C++ przez falauthy Stary wyjadacz (11,550 p.)
0 głosów
2 odpowiedzi 241 wizyt
pytanie zadane 20 lutego 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...