Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Intrebare scurta  (Citit de 2881 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« : Februarie 03, 2010, 21:54:21 »

Cod:
struct{int lev;
int eul;
};
vector<data> E;
E bine daca manipulez datele asa:
Cod:
E.lev.push_back(ceva);
E.eul.push_back(altceva);
Chestia e ca eu in program pot si chiar ar fi bine daca le-as baga in acelasi timp pe "ceva" si pe "altceva".
Sau altfel zis daca exista vreu mod prin care pot face cele 2 instructiuni de mai sus intr-una singura.

Multumesc anticipat!
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #1 : Februarie 03, 2010, 22:00:43 »

Ca sa scrie ce vrei tu, iti trebuie
Cod:
struct s
{
   vector<int> lev; //lev este acum un vector  alocat dinamic
   vector<int> eul; // la fel si eul
}E;
E.lev.push_back(ceva);
E.eul.push_back(altceva);
Daca ai doar 2 campuri poti face
Cod:
pair< vector< int >, vector< int > > E; //pair e declarat in utility
E.first.push_back(ceva);
E.second.push_back(altceva);
Dar is curios ce vrei sa faci, poate exista o solutie si mai simpla Smile
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #2 : Februarie 03, 2010, 22:09:24 »

Cod:
struct s {
    int lev, eul;
};
vector <s> V;

V.push_back((s){10, 100});
« Ultima modificare: Februarie 03, 2010, 23:56:00 de către Pripoae Teodor Anton » Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #3 : Februarie 03, 2010, 23:35:51 »

Cod:
struct s {
    int lev, eul;
} vector <s> V;

V.push_back((s){10, 100});


Mi se pare aiurea ce faci... asa ca am testat si pare sa dea eroare.
In fine ideea e sa folosesti constructori:

Cod:

#include <cstdio>
#include <vector>

using namespace std;

struct nod
{
int a, b;
nod(){};
nod(int _a, int _b)
{
a = _a;
b = _b;
};
};

vector<nod> a;

int main()
{
a.push_back(nod(10, 20));

return 0;
}



Constructorul nod(){}; trebuie pus, altfel nu vei mai putea declara nod x; (sau nici macar vector<nod> )


Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #4 : Februarie 03, 2010, 23:55:36 »

Da, am gresit. Trebuie ';' dupa declararea struct-ului. In rest mie imi merge pe linux.
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #5 : Februarie 04, 2010, 00:03:50 »

Da, am gresit. Trebuie ';' dupa declararea struct-ului. In rest mie imi merge pe linux.

uite am scris asa

Cod:

#include <cstdio>
#include <vector>

using namespace std;

struct nod
{
int a, b;
};

vector<nod> a;

int main()
{
a.push_back((nod) (10, 20));

return 0;
}



Si imi zice cand compilez cu g++ (pe linux):

tr.cpp:15: error: no matching function for call to ‘nod::nod(int)’


Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #6 : Februarie 04, 2010, 00:06:28 »

E '{10, 100}' nu '(10, 100)'.
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #7 : Februarie 04, 2010, 00:07:10 »

ah da... acum am vazut si eu...
Asa-i la batranete ... nu mai vezi bine Smile)
Memorat
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #8 : Februarie 04, 2010, 19:33:56 »

Dar daca as avea nevoie de o priority_queue in loc de vector? Think
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #9 : Februarie 04, 2010, 19:41:33 »

Cod:
#include <cstdio>
#include <queue>

using namespace std;

struct nod
{
int a, b;
nod(){};
nod(int _a, int _b) { a = _a; b = _b;}

bool operator < (const nod &x)const
// pt max-heap
// daca vrei min-heap inversezi semnul
{
if(a < x.a) return 1;
return 0;
};
};


int main()
{
priority_queue<nod> Q;
Q.push(nod(2,3));
Q.push(nod(4,1));
printf("%d %d\n", Q.top().a, Q.top().b);
return 0;
}


sau alta metoda e sa faci ceva de genu

Cod:

struct cmp
{
        bool operator()(const nod &a, const nod &b)const
        {
                  if(a.a < b.a) return 1;
                  return 0;
         }
};

si declari priority_queue<nod, vector<nod>, cmp> Q;
Memorat
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #10 : Februarie 05, 2010, 01:09:03 »

Am mai gasit o metoda la care e mai putin de scris dar e "trasa de par" Aha
Cod:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int,pair<int,int> > ii;
 priority_queue<ii,vector<ii>, greater<ii> > V;
int main()
{
    V.push(ii(1, pair<int,int> ( 2,3) ));
    cout<<V.top().first<<V.top().second.first<<V.top().second.second;

return 0;
}
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #11 : Februarie 05, 2010, 10:44:21 »

Eu zic ca e mai ok cum am zis eu cu operator < (sau ()). Adica e mai elegant de scris codul si in plus ai mai multa libertate: poti sa definesti compararea intre 2 elemente cum vrei tu.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines