Vector Klas

0

Chciałbym stworzyć wektor klas. W zasadzie chodzi o to żebym wpisywał tam pary liczb (nie wiem ile i dlatego jest to wektor).
Mam takie coś:

class pair
{
	int a;
	int b;
};

vector<pair> pary;

Ale nie kompiluje mi się to:
1>c:\users\mati\documents\visual studio 2008\projects\opencvdemo\opencvdemo\main.cpp(15) : error C2872: 'pair' : ambiguous symbol

Od razu czy mógłby mi ktoś napisać jak dodawać do wektora np. a=1 b=2. Jako pierwszy element w wektorze.

0

Nazwij inaczej klasę.. Nieszczęśliwe natrafiłeś na słowo klucz http://www.cplusplus.com/reference/std/utility/pair/
Już samo słowo ambiguous powinno dać Ci do myślenia:)

0
kopernik napisał(a)

Nieszczęśliwe natrafiłeś na słowo klucz

Jakie słowo klucz? Pierdoły piszesz chłopie jak leci :] Od tego między innymi pair jest w osobnej przestrzeni nazw, aby tacy ludzie jak nasz autor mogły stworzyć sobie własny typ o nazwie istniejącej w bibliotece. Jednak dla kogoś kto bezmyślnie stosuje "using namespace std;" to rzeczywiście może być problematyczne.

0
rafal__ napisał(a)

albo nazwij inaczej klasę, albo nie pisz nigdzie using namespace std;
albo umieść ją w osobnej przestrzeni nazw.

0

A jak teraz dodać element do wektora.

class Cpary
{
	int a;
	int b;
};

vector<Cpary> pary;
pary.push_back (a.1, b.2);

Takie coś nie działa :)

1

coś takiego spróbuj:

class Para
{
public:
  int a,b;
  Para() {}
  Para(int a, int b): a(a), b(b) {}
};

vector<Para> pary;
pary.push_back(Para(1,2));

albo wykorzystując gotowca:

vector< pair<int,int> > pary;
pary.push_back(make_pair(1,2));
0

Dzięki wielkie :)

vector< pair<int,int> > pary;
pary.push_back(make_pair(1,2));
cout<<pary[0].first<<" : "<<pary[0].second;
0

Jak przypisać wektor int do wektora float:
tzn:

vector< pair<int,int> > pola;
vector< pair<float,float> > stosunek=pola;
0

W sposób jaki podałeś nie da się. Gdyby były tego samego typu można by skopiować podając w konstruktorze zmiennej stosunek zakres iteratorów zmiennej pola. Nie dam sobie głowy uciąć, ale w tym wypadku trzeba chyba po prostu przelecieć forem i dokonać konwersji typów.

1
yurai napisał(a)

Nie dam sobie głowy uciąć, ale w tym wypadku trzeba chyba po prostu przelecieć forem i dokonać konwersji typów.
to dobrze, bo straciłbyś głowę ;)

using namespace std;

int main()
{
    vector< pair<int,int> > pola;
    pola.push_back(pair<int, int>(1, 2));
    pola.push_back(pair<int, int>(11, 22));

    vector< pair<int,int> >::iterator nIt = pola.begin();
    for(; nIt != pola.end(); ++nIt)
        cout << nIt->first << ' ' << nIt->second << '\n';

    vector< pair<float,float> > stosunek(pola.begin(), pola.end());
    vector< pair<float,float> >::iterator fIt = stosunek.begin();

    for(; fIt != stosunek.end(); ++fIt)
        cout << fIt->first << ' ' << fIt->second << '\n';

    return 0;
}
0

Lepiej się pisze z make_pair:

Zamiast:

pola.push_back(pair<int, int>(1, 2));

Napisz:

pola.push_back(make_pair(1, 2));

http://www.cplusplus.com/reference/std/utility/make_pair/

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