Czy da sie utworzyc vector tablic ?
Probowalem przez
vector<int[8]> v;
ale nie mam pojecia ja mozna tam wrzucic tam dane
Pomocy :)
Czy da sie utworzyc vector tablic ?
Probowalem przez
vector<int[8]> v;
ale nie mam pojecia ja mozna tam wrzucic tam dane
Pomocy :)
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;
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 ... :)
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 :)
struct element
{
int tab[10];
};
vector<element> v(10);
dane wrzucasz: np. v[0].tab[0]=1;