vector tablic

0

Czy da sie utworzyc vector tablic ?
Probowalem przez
vector<int[8]> v;
ale nie mam pojecia ja mozna tam wrzucic tam dane

Pomocy :)

0

Hmm, tak się da zadeklarować i nawet indeksować można v[x][y] ale jak zamierzasz coś dodać do takiego wektora?? int[8] jest tylko typem dla vectora... Przy takiej deklaracji GCC zgłasza błąd:

vector<int[8]> vv(5);
stl_vector.h:207: error: ISO C++ forbids casting to an array type `int[8]'

Oczywiście można "czarować"... Z drugiej strony można deklarować wektor wskaźników vector<int*> ALE ze wskaźnikami SĄ problemy. Skoro mamy C++ to lepiej zrobić:

vector< vector<int> > vv(10); // wektor tablic :)
vector<int> aa(8); // element czyli jedna tablica
//...
vv.push_back( aa );
vv[0][0] = 1;
vv[0][1] = 2;
0
int s[8]
vector< vector<int> > vv(10); // wektor tablic :)
vector<int> aa(8); // element czyli jedna tablica

Hmm no tak ale chcialbym w wektorze umieszczac tablice a nie wektor, tutaj musialbym jeszcze dodatkowo

for(int i=0;i<8;i++)
aa.push_back(s[i]);

vv.push_back(aa);

od razu tablicy nie da sie wrzucic ?? tak tylko pytam ... :)

0

Przecież vector to dynamiczna tablica. Nie rozumiem co Ci przeszkadza w użyciu vectora wewnątrz vectora?? Nie wiesz jak zaincjalizować??

A ty chcesz jakiejś tablicy użyć w tablicy tablic?? Ufff, chyba trochę problem z projektem :> Po grzyba Ci vector tablic? Będziesz zmieniał jego rozmiar dynamicznie? Może wystarczy ci zwykła tablica wskaźników??

Ale masz init tablicą (oczywiście dokonywane jest kopiowanie elementów!):

#include <vector>
#include <iostream>
using namespace std;

// jakaś tablica
int tab[10] = {255, 1337, 3,4,5,6,7,8,9,10};

int main()
{
vector< vector<int> > vv;
vector<int> aa(8);
vector<int> bb( tab, tab+10 ); //!! inicjalizacja tablica tab !!
//...
vv.push_back( aa );
vv.push_back( bb );    
vv[0][0] = 1;
vv[0][1] = 2;
// dane z tablicy ALE jako wartosci zostaly skopiowane do wektora bb
cout << vv[1][0] << endl;
cout << vv[1][1] << endl;
cout << vv[1][9] << endl;    
}

Jeśli nie chcesz kopiowania to użyj vector<int*> ale nie mów później, że nie ostrzegałem... Ale jeżeli tablice są statyczne to wszystko OK :)

    vector<int*> ii;
    ii.push_back( tab );
    //...
    cout << ii[0][0] << endl;
    cout << ii[0][1] << endl;
    cout << ii[0][9] << endl;    

Żeby już wyczerpać możliwości, możesz używać też klasy, która przedstawia tablicę tak jak np. boost::array z biblioteki boost :) To dla tablic dynamicznie tworzonych (albo nie-statycznych). Wtedy masz deklarację w stylu:

boost::array<float,6> aa;

Powodzenia :)

0

struct element
{
int tab[10];
};

vector<element> v(10);

dane wrzucasz: np. v[0].tab[0]=1;

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