infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Dragos din Februarie 03, 2010, 21:54:21



Titlul: Intrebare scurta
Scris de: Dragos din 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!


Titlul: Răspuns: Intrebare scurta
Scris de: alexandru din 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 :)


Titlul: Răspuns: Intrebare scurta
Scris de: Pripoae Teodor Anton din Februarie 03, 2010, 22:09:24
Cod:
struct s {
    int lev, eul;
};
vector <s> V;

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


Titlul: Răspuns: Răspuns: Intrebare scurta
Scris de: Mircea Dima din 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> )




Titlul: Răspuns: Intrebare scurta
Scris de: Pripoae Teodor Anton din Februarie 03, 2010, 23:55:36
Da, am gresit. Trebuie ';' dupa declararea struct-ului. In rest mie imi merge pe linux.


Titlul: Răspuns: Intrebare scurta
Scris de: Mircea Dima din 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)’




Titlul: Răspuns: Intrebare scurta
Scris de: Pripoae Teodor Anton din Februarie 04, 2010, 00:06:28
E '{10, 100}' nu '(10, 100)'.


Titlul: Răspuns: Intrebare scurta
Scris de: Mircea Dima din Februarie 04, 2010, 00:07:10
ah da... acum am vazut si eu...
Asa-i la batranete ... nu mai vezi bine :))


Titlul: Răspuns: Intrebare scurta
Scris de: Dragos din Februarie 04, 2010, 19:33:56
Dar daca as avea nevoie de o priority_queue in loc de vector? :-k


Titlul: Răspuns: Intrebare scurta
Scris de: Mircea Dima din 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;


Titlul: Răspuns: Intrebare scurta
Scris de: Dragos din 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;
}


Titlul: Răspuns: Intrebare scurta
Scris de: Mircea Dima din 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.