vector elemének sorszáma

Fórumok

Üdvözletem!

Rákerestem a vector és vektor szavakra a C++ fórumtémák között, de nem leltem okosságot.

Az alábbi kódrészletecskével gondoltam ismerkedni a vektorokkal:


#include <vector>

using std::vector;
using std::cin;
using std::cout;
using std::endl;
// tom, h. using namespace std; rovidebb lenne.

int main()
{

vector <int> ENVEKTOROM;

ENVEKTOROM.push_back(100);
ENVEKTOROM.push_back(200);
ENVEKTOROM.push_back(300);


for (vector<int>::iterator VEKTOR_ELEM_MUTATO = ENVEKTOROM.begin(); VEKTOR_ELEM_MUTATO != ENVEKTOROM.end(); VEKTOR_ELEM_MUTATO++)
    {
    cout << *VEKTOR_ELEM_MUTATO << endl;
    }

}

Ezzel a három egészt tartalmazó vektotom elemeit elegánsan megjelenítem a képernyőn:
100
200
300

Ez ok. De mi van, ha az elemek sorszámát is ki akarom íratni így:
1. 100
2. 200
3. 300
netán így:
0. 100
1. 200
2. 300

Csak ennyire átalakítva sikerült megoldani, de van jobb megoldás, ahol a fentit nem kell ennyire átírni? Netán egy függvény, vagy mutató ami erre jó lenne?
(Vektor osztály tagja, amivel egyszerűbben meg lehet csinálni az első példát egy picit kibővítve?

Átalakított változat:


#include <vector>

using std::vector;
using std::cin;
using std::cout;
using std::endl;
// tom, h. using namespace std; rovidebb lenne.

int main()
{

vector <int> ENVEKTOROM;

ENVEKTOROM.push_back(100);
ENVEKTOROM.push_back(200);
ENVEKTOROM.push_back(300);


for (int index=0; index < ENVEKTOROM.size(); index++)
    {
    cout << index + 1 << ". " << ENVEKTOROM.at(index) << endl;
    }

}

Hozzászólások


int i = 1;
for (vector<int>::iterator VEKTOR_ELEM_MUTATO = ENVEKTOROM.begin(); VEKTOR_ELEM_MUTATO != ENVEKTOROM.end(); VEKTOR_ELEM_MUTATO++) {
    cout << i << ". elem: " << *VEKTOR_ELEM_MUTATO << endl;
    i++;
}

Vagy:


vector<int>::iterator it = ENVEKTOROM.begin();
for (int i = 0; it+i != ENVEKTOROM.end(); i++) {
  cout << i+1 << ". elem: " << *(it+i) << endl;
}

Köszönöm a választ!
Ezexerint nincs a vector osztálynak beépített megoldása erre. Sejtettem, de el is szomorít. Ha már van vector.at(), akkor miért nincs visszafeléje is...
Azért titkon reméltem, hogy nem kell segéd indexet használni :(
BTW melyik az "igazi C++ programozóhoz méltó" megoldás?
Esetleg van más konténer, ami jó lenne erre?
--
unix -- több, mint kód. filozófia.
Life is feudal

A vector azert nem keresheto visszafele (elem->index irany), mert megengedi ugyanazon elem megegyszeri hozzaadasat is. Melyik lenne hat az elem indexe? Az ujabb, vagy a regebbi? Lasd meg: tyuk vs tojas.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Közben próbálgattam valamit kifaragni az iterátorokból.


#include <string>
#include <iostream>
#include <vector>

using std::endl; using std::cin; using std::cout; using std::string; using std::vector;

int main()
{
vector <int> PROBA;
int IT,KT,BT;
PROBA.push_back(100);
PROBA.push_back(200);
PROBA.push_back(300);

vector<int>::iterator szamlalo=PROBA.begin();

KT=PROBA.size();
BT=PROBA.end() - PROBA.begin();
for (szamlalo=PROBA.begin(); szamlalo != PROBA.end(); szamlalo++)
    {
    IT =  PROBA.end() - szamlalo;
    cout << BT - IT + 1 << ". " << *szamlalo << endl;
//  cout << KT - IT + 1 << ". " << *szamlalo << endl; is mukodne...
    }

}

Vagy segédváltozók nélkül:



for (szamlalo=PROBA.begin(); szamlalo != PROBA.end(); szamlalo++)
    {
    cout << (int)(PROBA.end() - PROBA.begin()) -  (int)(PROBA.end() - szamlalo)  + 1 << ". " << *szamlalo << endl;
    }

Köszönöm a hozzászólásokat! Asszem alap szinten sikerült megismerkednem a vektorral :D
--
unix -- több, mint kód. filozófia.
Life is feudal

Beírom inkább a teljes kódot:


#include <string>
#include <iostream>
#include <vector>

using std::endl; using std::cin; using std::cout; using std::string; using std::vector;

int main()
{
vector <int> PROBA;

PROBA.push_back(100);
PROBA.push_back(200);
PROBA.push_back(300);

vector<int>::iterator szamlalo=PROBA.begin();

for (szamlalo=PROBA.begin(); szamlalo != PROBA.end(); szamlalo++)
    {
    cout << (int)(PROBA.end() - PROBA.begin()) -  (int)(PROBA.end() - szamlalo)  + 1 << ". " << *szamlalo << endl;
    }

}

--
unix -- több, mint kód. filozófia.
Life is feudal

[off]
amikor a fagylalt visszanyal :)
[/off]
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.

[szarkazmus]eljenek az iteratorok![/szarkazmus]
talan meg az iteratorok kulonbsege lenne a leglogikusabb kivonni az i-dik iteratorbol a begin()-t, de reg volt nekem a c++ nem tudom van e definialva rajuk a kivonas - es ha van az mit ad.. de meg ha mukodik is nem vagyok biztos benne, hogy nem tombre hanem mondjuk egy binaris fara a linearis bejaras nem lesz mondjuk negyzetes...
Ket valtozot hasznalva egyet a sorszamnak egyet az iteratornak meg logikatlanabb...
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.