Jak zwrócić z funkcji tablicę z danymi ?

0

Potrzebuje rozwiązać taki problem. Chcę mieć funkcję która przyjmuje wartość string. W tej wartości jest zapytanie wyjmujące dane z bazy. Wartości może być kilka więc chciałbym by funkcja zwróciła mi tablicę wyników. I teraz tak. Nie chcę robić jakiejś globalnej tablicy bo to bez sensu.

  1. Czy to znaczy, że powinienem do funkcji jako argument przekazać nazwę tablicy do jakiej funkcja ma zwrócić dane?
  2. Czy powinienem przekazać wskaźnik do tej tablicy?
    I druga sprawa mianowicie nie wiem ile będzie elementów tablicy to jak stworzyć taką tablicę dynamiczną ?
0

Są 2 wersje. Albo zwracasz wskaźnik na pierwszy element nowozalokowanej tablicy lub też przekazujesz tablicę jako parametr do funkcji. Wybierz wygodniejsze dla Ciebie rozwiązanie.

0

A jak przekazać tablice jako parametr jak nie wiem ile w niej będzie elementów ? Powołać tablice dynamiczna i przekazać do niej wskaźnik ?

1

Możesz też użyć jakiegoś wrappera, np. std::vector. Dodatkowo w pakiecie otrzymasz kod leak-free.

0

Nie no jeszcze ni ejestem tak zaawansowany na wrapery i nie wiem co to leak free :D

0

Akurat std::vector to jedna z pierwszych konstrukcji, które poznaje się w STL. Co do drugiego - sprawdź sobie w słowniku. Masz takie doświadczenie w programowaniu, że takie zagadnienia powinieneś zjadać na śniadanie, z użyciem googli chociażby. Czy naprawdę tak trudno było wpisać w wyszukiwarkę 'C++ how to return array'?

0

Z tego co wyczytałem to można utworzyć tablicę statyczną gdzie przed kompilacją podaje się rozmiar lub dynamiczną, rozmiar podawany po kompilacji przez np użytkownika.
Czyli najpierw muszę przeliczyć ile zapytanie z bazy wyświetli wyników a później tę ilość wpisać
w zadeklarowaną tablicę dynamiczną ? Bo chciałem żeby rekordy zostały przepisane do tablicy tej mojej zadeklarowanej
dynamicznie ale dopiero podczas wpisania byłoby wiadomo ile jest elementów a nie przed. Czy da się to zrobić ?

0

Przecież mówimy o tym od samego początku.

0

Dostałeś już odpowiedź. Użyj vectora. Ma wszystko czego potrzebujesz. Metodą push_back() dodajesz elementy do końca tablicy, a dodatkowa pamięć jest przydzielana automatycznie.

0

No to tworze tablice dynamiczną wzięte ze strony:

int **tablica = new int * [n];
for (int j=0; j<n; j++){
tablica[j] = new int[n];
}

teraz można się odwołać do tej tablicy jako tablica[0][0]=5;

Wysyłam teraz wskaźnik tablicy do funkcji tak ? i ta funkcja wybiera dane z bazy i
ma przypisane wartości : result res = trans.exec("SELECT * FROM tabelka");
Czyli w mojej zmienej res[0][0] jest pierwsza kolumna tabeli w res[0][1] jest druga kolumna w tabeli

I teraz chce przepisać z tablicy res do mojej nowej balicy tablica
Jest taka funkcja kpiujaca dane
void * memcpy( void * adres_docelowy, const void * adres_zrodlowy, size_t ilosc );
I co tu wpisać skad wziac tą ilość jesli chce cała tablice to moge pominąc ten parametr?
i wpisac:
void * memcpy( void * tablica, const void * res, NULL );
Potrzebuje żeby zrozumieć zrobić prostą operację:

  1. wywołaj funkcje
  2. pokaż jej gdzie ma zwrócić dane
  3. Wybierz dane z bazy
  4. przypisz do tego miejsca co wksazałeś
  5. zwróć.
  6. po przetworzeniu zwolnij pamiec tablicy
  7. ta daaaam

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