[C++] Wielowymiarowe wektory


#1

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ę.


(Przemekbaranowski) #2

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...


(Blapiter) #3

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();

#4

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.


(Blapiter) #5

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);

}

#6

Dokładnie, chcę dodać jeden element w czwartym wymiarze tego wektora :stuck_out_tongue:

Niestety nadal nie działa :confused:

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

Dodatkowo mam pytanie co do pogrubionej linijki:

Dlaczego tu jest "vector4[0][0]" a nie "vector4[0][0][0]"?


(Blapiter) #7

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

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;

}