Witam,
mam pytanie:
jak mam wektor 4-wymiarowy:
vector< vector< vector< vector > > >vector4
To jest jakaś możliwość sprawdzenia wielkości czwartego wymiaru? Czyli tego: vector4[0][0][0][?]
Z góry dziękuję.
Witam,
mam pytanie:
jak mam wektor 4-wymiarowy:
vector< vector< vector< vector > > >vector4
To jest jakaś możliwość sprawdzenia wielkości czwartego wymiaru? Czyli tego: vector4[0][0][0][?]
Z góry dziękuję.
vector4->front()->front->front()->front() - zwraca element z najgłębszej “incepcji”. chyba
vector4->front()->front->front()->capacity() - powinno zwrócić wielkość czwartego wymiaru. też chyba…
Poprostu
.size()
czyli:
vector4[0][0][0].size();
pierwszy wymiar :
vector4.size();
drugi wymiar:
vector4[0].size();
trzeci wymiar:
vector4[0][0].size();
no i czwarty wymiar
vector4[0][0][0].size();
Nie wiem czemu, ale jak dodaję tą linijkę to program mi sie zacina…
std::cout << vector4[0][0][0].size() << std::endl;
Cała funkcja:
vector< vector< vector< vector > > > Vpush_back(int dana, vector< vector< vector< vector > > >vector4){
vector< vector< vector > >vector3;
vector< vector >vector2;
vector vector1;
int ktoryvector4 = -1;
std::cout << vector4[0][0][0].size() << std::endl;
while(vector4[0][0][0].size() > ktoryvector4-2){
ktoryvector4++;
vector1.push_back(vector4[0][0][0][ktoryvector4]);
}
vector1.push_back(dana);
vector2.push_back(vector1);
vector3.push_back(vector2);
vector4.push_back(vector3);
return vector4;
}
jak wykomentowywuję linijkę z tym sprawdzaniem wielkości i z pętlą while to działa.
Najgorsze że nie wyskakują żadne blędy.
Na pewno masz błąd w tej linijce :
int ktoryvector4 = -1;
while(vector4[0][0][0].size() > ktoryvector4-2){
ktoryvector4++;
vector1.push_back(vector4[0][0][0][ktoryvector4]);// TUTAJ
}
gdzie zakładając na przykład wektor ma 3 liczby to przy ostatnim obrocie pętli while, zmienna ktoryvector4 będzie miała wartość 5 więc wychodzi poza obszar tablicy. Jeżeli twoim zamysłem było pracowanie na tym samym wektorze vector4 i tylko rozszerzanie jego następnego wymiaru o poprzedni plus ‘dana’ to ja zrobiłbym to tak :
void Vpush_back(int dana, vector< vector< vector< vector > > > & vector4)
{
vector vector1;
for(vector::const_iterator it = vector4[0][0][0].begin(); it != vector4[0][0][0].end(); it++)
{
vector1.push_back(*it);
}
vector1.push_back(dana);
vector4[0][0].push_back(vector1);
}
Dokładnie, chcę dodać jeden element w czwartym wymiarze tego wektora
Niestety nadal nie działa
vector< vector< vector< vector > > > Vpush_back(int dana, vector< vector< vector< vector > > > & vector4)
{
vector vector1;
for(vector::const_iterator it = vector4[0][0][0].begin(); it != vector4[0][0][0].end(); it++)
{
vector1.push_back(*it);
}
vector1.push_back(dana);
[b]vector4[0][0].push_back(vector1);[/b]
return vector4;
}
nadal mi się zacina
Dodatkowo mam pytanie co do pogrubionej linijki:
Dlaczego tu jest “vector4[0][0]” a nie “vector4[0][0][0]”?
To vector4[0][0][0][0] zwraca Ci pierwszą cyfrę w pierwszym wektorze
vector4[0][0][0] zwraca Ci cały pierwszy wektor(klasę) jeden wymiar, więc
vector4[0][0][0].push_back(vector1) oznaczałoby że do jednowymiarowej tablicy chcesz dodać tablice a tak się nie da
vector4[0][0] zwraca wszystkie jednowymiarowe vektory na pozycji 0 tak więc tu już można dodawać całe wektory.
Mi działa:
void Vpush_back(int dana, vector< vector< vector< vector > > > & vector4)
{
vector vector1;
for(vector::const_iterator it = vector4[0][0][0].begin(); it != vector4[0][0][0].end(); it++)
{
vector1.push_back(*it);
}
vector1.push_back(dana);
vector4[0][0].push_back(vector1);
}
int main(int argc, char *argv[])
{
vector< vector< vector< vector > > > vector4;
vector< vector< vector > >vector3;
vector< vector >vector2;
vector vector1;
vector1.resize(5,5);
vector2.push_back(vector1);
vector3.push_back(vector2);
vector4.push_back(vector3);
for(int i=0; i < vector4[0][0].size(); i++)
{
for(int j=0; j < vector4[0][0][i].size(); j++)
{
cout<
}
}
cout<<"\nPrzed funkcja ."<
Vpush_back(20, vector4);
for(int i=0; i < vector4[0][0].size(); i++)
{
for(int j=0; j < vector4[0][0][i].size(); j++)
{
cout<
}
cout<
}
cin.sync();
cin.get();
return 0;
}