Vector tablica dwuwymiarowa

Vector tablica dwuwymiarowa
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak by wyglądało za alokowanie takiej tablicy za pomocą wektorów?

Kopiuj
int **tab;
tab = new int *[10];
for (int i = 0; i < 10; i++)
{
	tab[i] = new int[7];
}
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
 vector<array<double>>tab(7,10);

Dobrze zrozumiałem? Czy mogę również zrobić to w ten sposób?

vector<<array<double>>tab;
for(int i=0; i<10;i++)
{

  tab.push_bac

}

  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
vector << array<double >> tab;
for (int i = 0; i<10; i++)
{
	vector<int>temp(7);
	tab.push_back(temp);
}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Źle rozumiesz. Jeśli rozmiar wewnętrznej tablicy jest znany w czasie kompilacji vector<array<T, rozmiar>>. Jeśli nie jest, to:

  • jeśli chcesz prostokątną tablicę 2d - użyj jednowymiarowej i widoku 2d z posta
  • jeśli wewnętrzne tablice mają mieć różne długości: vector<vector<T>>
  • Rejestracja: dni
  • Ostatnio: dni
0

Okej powiedzmy, że zrozumiałem :)

Kopiuj
for (int i = 0; i < 10; i++)
		{
			vector<double>temp;
			for (int j = 0; j < 7; j++)
			{
				temp.push_back(i);
			}
			tab.push_back(temp);
		}

a potem mogę sobie zrobić np.

Kopiuj
tab[2][2]=5;

prawda?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

Niby prawda, ale w ten sposób w linii tab.push_back(temp) kopiujesz cały wiersz, co teoretycznie przy ogromnym rozmiarze tablicy (albo przy wielokrotnym wykonaniu tego kodu) byłoby niewydajne. Można temu zaradzić:

Kopiuj
tab.push_back(move(temp));
koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
0

A nie można od razu zadelarować (jak się chce mieć wektor wektorów) tak:
std::vector< std::vector<double> > tab ( std::vector< std::vector<double> >(10, std::vector<double>(7)) );
?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.