Wyświetlanie zawartości vectora

0
void wyswietlLiczby()
{
	vector<unsigned short>::iterator i;
	unsigned short j=0;
	for(i=liczby.begin();i!=liczby.end();++i)
	{
		cout << "liczby[" << j << "]:\t" << liczby[*i] << "\n";   //zapis pierwszy
                cout << "liczby[" << j << "]:\t" << *i << "\n";             //zapis drugi
		j++;
	}
	cout << "\n";
}

Który zapis jest poprawniejszy/poprawny ? Chodzi o prawidłowe wyświetlenie zawartości vectora. Na szybko sobie naklepałem w notatniku coś na wzór tego zadania http://4programmers.net/Forum/C_i_C++/200482-vector_i_losowanie_liczb_bez_powtorek :p
Jeśli wypełniłem vector zerami, to wszystkie wartości wyświetlone były równe. Natomiast, gdy użyłem rand(), to np. liczby[10]!=liczby[10], gdzie lewa strona to wynik z pierwszego, a prawa z drugiego zapisu. Ostatnio pisałem coś "większego" i używałem drugiego zapisu i było ok. Co z pierwszym ?

1

"Zapis pierwszy" to jakaś bzdura. Przecież iterator jest "wskaźnikiem" na element, dlaczego chcesz go używać do indeksowania tablicy?

1

Zastanów się co zwraca *i... przecież zwraca konkretną wartość jakiegoś elementu tego wektora, tą wartość używasz do jego indeksowania. To tak jakbyś zrobił tak:

for(size_t i = 0; i < liczby.size(); i++)
{
    cout << liczby[liczby[i]] << "\n";
}
0

@Endrju nie chcę używać do indeksowania, w sumie to chodzi mi o to czy to ma jakieś wykorzystanie. Napisałem i dopisałem jeszcze ten "pierwszy zapis". Myślałem, że kompilator wyrzuci błąd, bo tak jak piszesz *i zwróci mi wartość elementu. Trochę się zdziwiłem, bo błędu nie było, a jak wypełniłem vector jedynkami, to ten błędny zapis wyrzucił też same jedynki. Czyli on tak naprawdę wyrzuca śmieci ?

1

Ehhh, dlaczego kompilator miałby wywalić błąd. Przecież to jest wektor intów, więc *i to jest jakiś int, a przecież wektor można indeksować intami np. liczby[5]
Bardziej obrazowo. Masz vector liczby, który ma w sobie liczby 0, 1, 100 i teraz robiąc tak

for(auto it = liczby.begin(); it != liczby.end(); it++)
    cout << liczby[*it] << "\n";

będziesz się odwoływał do następujących elementów
liczby[0], liczby[1], liczby[100] - no i wylazłeś poza ten wektor i módl się, żeby się program wysypał.

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