Kako se (ako je moguće) napravi vektor vektora u c++u? Nešto kao "vektorska" matrica,ako se ne preporuča uporaba "običnih" arraya.
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Napravi vektor pokazivaca na vektor.

Takoreci nisam radio s vektorima. Pogledaj ovu poruku.
Ne znam... Mozda bi se dalo iskemijati nesto u ovom stilu? Isprobavaj, igraj se...
vector<vector<int>*>cijeli_brojevi;
for(int i = 0; i <10; i++) {
vector<int> *vektorcic = new vector<int>;
cijeli_brojevi.push_back(vektorcic);
}
Nisam odavno programirao, ali mislim da bi običan vektor vektora trebao poslužiti... znači vector<vector<int>> mat. Sad bi tome pristupao sa npr. mat[0][0] za prvi element prvog vektora.
Nisam odavno programirao, ali mislim da bi običan vektor vektora trebao poslužiti... znači vector<vector<int>> mat. Sad bi tome pristupao sa npr. mat[0][0] za prvi element prvog vektora.
Vjerojatno bi posluzio - tako je barem napisano u poruci za koju sam dao link. U biti, varijabla za vektor je zapravo referenca (da ne kazem pokazivac) na prvi element vektora.
Edit: Bas sad sam provjerio - to je tako kod polja, ali ne i kod vektora, odnosno predloska klase vector.
Nisam odavno programirao, ali mislim da bi običan vektor vektora trebao poslužiti... znači vector<vector<int>> mat. Sad bi tome pristupao sa npr. mat[0][0] za prvi element prvog vektora.
Potreban razmak jer >> je operator. Također bi bilo dobro dodati veličinu matrice
vector<vector<int> >matrica(10, 10);
Nisam odavno programirao, ali mislim da bi običan vektor vektora trebao poslužiti... znači vector<vector<int>> mat. Sad bi tome pristupao sa npr. mat[0][0] za prvi element prvog vektora.
Potreban razmak jer >> je operator. Također bi bilo dobro dodati veličinu matrice
Onda uopce nema smisla koristiti predlozak klase vector, nego jednostavno koristis dvodimenzionalno polje. Cijeli smisao koristenja vectora je u tome da kod deklaracije ne znas koliko ces imati elemenata.
Napravi vektor pokazivaca na vektor.
Takoreci nisam radio s vektorima.
...Cijeli smisao koristenja vectora je u tome da kod deklaracije ne znas koliko ces imati elemenata.
Ajd ti prvo nauči vektore.
Nisam odavno programirao, ali mislim da bi običan vektor vektora trebao poslužiti... znači vector<vector<int>> mat. Sad bi tome pristupao sa npr. mat[0][0] za prvi element prvog vektora.
vector<vector<int> >matrica(10, 10);
Jesi li siguran da se može na taj način inicijalizirati? Mislim da je (int a, <tip> b) konstruktor ako želiš a elemenata tipa b. (možda bi ovako nešto radilo: (10, vector<int>(10)) - dakle 10 vektora veličine 10 elemenata)
Možeš i tako.
vector<vector<int> >matrica(10, vector<int>(10, 5));
Sada svi elementi matrice imaju vrijednost 5.

...Cijeli smisao koristenja vectora je u tome da kod deklaracije ne znas koliko ces imati elemenata.
Ajd ti prvo nauči vektore.
Mozes objasniti sto pogresno sam napisao i zasto je pogresno?
...Cijeli smisao koristenja vectora je u tome da kod deklaracije ne znas koliko ces imati elemenata.
Ajd ti prvo nauči vektore.
Mozes objasniti sto pogresno sam napisao i zasto je pogresno?
To nije smisao korištenja vektora jer kada ne znaš koliko ćeš imati elemenata možeš koristiti i pokazivače na objekte.
Vektori kroz STL proširuju set mogućnosti i pojednostavljuju rad s poljima a tek jedna od tih mogućnosti je i push_back (na što si vjerojatno mislio). Ostale članske funkcije se mogu naći ovdje.
...Cijeli smisao koristenja vectora je u tome da kod deklaracije ne znas koliko ces imati elemenata.
Ajd ti prvo nauči vektore.
Mozes objasniti sto pogresno sam napisao i zasto je pogresno?
To nije smisao korištenja vektora jer kada ne znaš koliko ćeš imati elemenata možeš koristiti i pokazivače na objekte.
Nisam te bas shvatio. Jedno ne iskljucuje drugo. Ako je bitno da se elementima pristupa preko indeksa, onda su vector/deque pokazivaca na objekte dobro rjesenje. Ako to nije bitno, onda je bolji list. Mozes si i sam ici radit vezanu listu, jedino je problem u tome sto onda pokazivaci za povezivanje trebaju biti sastavni dio povezanih objekata.
Vektori kroz STL proširuju set mogućnosti i pojednostavljuju rad s poljima a tek jedna od tih mogućnosti je i push_back (na što si vjerojatno mislio). Ostale članske funkcije se mogu naći ovdje.
U osnovi sav taj set dodatnih mogucnosti (u odnosu na polja) odnosi se na "dinamicnost" - dakle, upravo na ono sto je (osnovna) prednost vektora pred poljima - da mozes dodavati, umetati i brisati elemente. Ne vidim sto drugo bi bilo od neke posebne vaznosti, a da se ne odnosi na spominjanu dinamicnost.
Ako ti ne trebaju stvari koje donosi vector, onda ti je array sasvim dovoljan.
Primijeti inace jednu stvar - vektor vektora nije nuzno matrica! Naime, svaki od tih vektora moze biti razlicite duljine. To je matrica ako svaki od vektora unutar glavnog vektora ima jednak broj elemenata. BTW nasao sam link vezan uz visedimenzionalnost i vektore koji bi ti mogao biti zanimljiv: http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html
znaci ovo je moj program i ako bi mi itko mogao pomoci oko problema...imam funkciju skalarni produkt SkProdukt koju moram koristiti za pomnozit matricu i vektor u funkciji PomnoziMatVekt...e sad moj problem je kako napravit da mi ta funkcija vraca produkt koji je oblika vektor? unaprijed hvala
#include <iostream>
#include <iomanip>
#include <math.h>
#include <vector>
#include <assert.h>
using namespace std;
struct Vektor3D
{
vector<double> e;
Vektor3D() {
e.resize(3);
}
Vektor3D(double pX, double pY, double pZ) {
e.resize(3);
e[0]=pX;
e[1]=pY;
e[2]=pZ;
}
Vektor3D(vector<double> p) {
assert( p.size()==3 );
e=p;
}
};
vector<double> komponente;
struct Matrica3D
{
vector< Vektor3D > r;
Matrica3D() {
r.resize(3);
}
Matrica3D(Vektor3D a, Vektor3D b, Vektor3D c){
r.resize(3);
r[0] = a;
r[1] = b;
r[2] = c;
}
Matrica3D(vector< vector<double> > p) {
r.resize(3);
assert( p.size()==3 );
r[0] = Vektor3D( p[0] );
r[1] = Vektor3D( p[1] );
r[2] = Vektor3D( p[2] );
}
};
Vektor3D Zbroji(Vektor3D v1, Vektor3D v2) {
return Vektor3D(
v1.e[0]+v2.e[0],
v1.e[1]+v2.e[1],
v1.e[2]+v2.e[2]
);
}
double SkProdukt(Vektor3D v1, Vektor3D v2) {
return v1.e[0]*v2.e[0] + v1.e[1]*v2.e[1] + v1.e[2]*v2.e[2];
}
Vektor3D DobaviStupac(Matrica3D m, int i){
assert(i>=0 && i<3);
return Vektor3D( m.r[0].e[i], m.r[1].e[i], m.r[2].e[i]);
}
Vektor3D DobaviRedak(Matrica3D m, int i){
assert(i>=0 && i<3);
return m.r[i];
}
void IspisiVektor(Vektor3D a)
{
cout<<a.e[0]<<"i+ "<<a.e[1]<<"j+ "<<a.e[2]<<"k"<<endl;
}
void Ispisi(Vektor3D a)
{
cout<<a.e[0]<<" "<<a.e[1]<<" "<<a.e[2]<<" "<<endl;
}
void IspisiMatricu(Matrica3D m)
{
Ispisi(DobaviRedak(m,0));
Ispisi(DobaviRedak(m,1));
Ispisi(DobaviRedak(m,2));
}
Vektor3D PomnoziMatVekt(Matrica3D m ,Vektor3D a)
{
SkProdukt (m.r[0], a);
SkProdukt (m.r[1], a);
SkProdukt (m.r[2], a);
}
int main()
{
Vektor3D vektor1 (5,7,3);
Vektor3D vektor2 (4,5,6);
Vektor3D vektor3 (6,9,3);
Vektor3D vektor4 (1,2,3);
Vektor3D vektor5 (2,3,4);
Matrica3D m1 (vektor1,vektor2,vektor3);
Matrica3D m2 (vektor4,vektor5,vektor1);
IspisiVektor(vektor1);
IspisiMatricu(m1);
}