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];
}
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];
}
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
}
vector << array<double >> tab;
for (int i = 0; i<10; i++)
{
vector<int>temp(7);
tab.push_back(temp);
}
Źle rozumiesz. Jeśli rozmiar wewnętrznej tablicy jest znany w czasie kompilacji vector<array<T, rozmiar>>
. Jeśli nie jest, to:
vector<vector<T>>
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?
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));
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)) );
?