Mam kilka zmiennych int w programie. Dla każdej z nich chiałbym wyszukać wszystkie dzielniki i zapisać je potem do kilku tablic. Jako że zmiennych liczbowych jest kilka to nie chciałbym robić kilku funkcji robiących praktycznie to samo. Moje pytanie brzmi: jak przekazać do funkcji nazwe tablicy (może sam wskaźnik…) i jak operować na tej tablicy wewnątrz funkcji. Tablica jest dynamiczna (vector). Głowie się nad tym już jakiś czas a efektów nie ma…
Nazwy zmiennych (w tym tablic) nie istnieją. To syntaktyczny cukier który daje Ci język programowania. Chcesz tablicę tablic, tablicę wektorów albo wektor wektorów. Nie bardzo rozumiem w czym problem. Przykład (z palca):
// CalcSomething transfers ownership of results
int *CalcSomething(int value)
{
int *results = NULL;
int t = 0;
int i = 0;
t = (rand() % 10) + 2;
results = (int*)malloc(sizeof(int) * (t + 1));
if (results == NULL)
goto _exit;
for (i = 0; i < t; ++i)
results[i] = i * value;
results[t] = -1;
_exit:
return results;
}
void foo()
{
const int count = 5;
int inputs[count] = {};
int **outputs = NULL;
int i = 0;
int j = 0;
outputs = (int**)malloc(sizeof(int*) * count);
if (outputs == NULL)
goto _exit;
memset(outputs, 0, sizeof(int*) * count);
for (i = 0; i < count; ++i)
{
outputs[i] = CalcSomething(i);
}
for (i = 0; i < count; ++i)
{
printf("Results for %d:\n", i);
if (outputs[i][j] == NULL)
{
printf("[error]\n\n");
}
else
{
for (j = 0; outputs[i][j] != -1; ++j)
{
printf("%d ", outputs[i][j]);
}
printf("\n\n");
}
}
_exit:
if (outputs)
{
for (i = 0; i < count; ++i)
{
if (outputs[i])
free(outputs[i]);
}
free(outputs);
outputs = NULL;
}
}
Kod i tak musisz z deczka zmienić, bo używasz wektorów. Brzydka rzecz w tym kodzie to użycie magicznej wartości -1 jako terminatora tablicy - można to rozwiązać bardziej elegancko.
@[alex]: sądzę, że trudnością nie jest push_back a to, że autor potrzebuje vektor wektorów (zmienna ilość liczb wejściowych, każda z nich ma kilka wektor wyników, a nie jeden wynik).