Vector tablica dwuwymiarowa

0

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

int **tab;
tab = new int *[10];
for (int i = 0; i < 10; i++)
{
	tab[i] = new int[7];
}
0
 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

}

0
vector << array<double >> tab;
for (int i = 0; i<10; i++)
{
	vector<int>temp(7);
	tab.push_back(temp);
}
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>>
0

Okej powiedzmy, że zrozumiałem :)

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.

tab[2][2]=5;

prawda?

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ć:

tab.push_back(move(temp));
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)) );
?

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