Pętla for w standardzie C++11 - wydajność

0

Cześć, mam dwa pytania dot. pętli for w C++:

Po pierwsze: dlaczego kod:

	for(auto const& x : vec1)
		{
		unsigned i = 0;
		vec2[i] = x*2.0 + 1.0;
		++i;
		}

wywołuje się szybciej od tego:

	unsigned i = 0;
	for(auto const& x : vec1)
		{
		vec2[i] = x*2.0 + 1.0;
		++i;
		}

Różnica polega tylko na tym, że deklaracja zmiennej i została umieszczona wewnątrz bloku pętli for.

A drugie pytanie to czy w nowej pętli C++11 da się jakoś sprawdzić, który indeks jest obecnie wywoływany, czy muszę deklarować kolejną zmienną jak powyżej?

2

Ponieważ kompilator zastąpi ten pierwszy tym:

    for(auto const &x:vec1) vec2[0]=x*2.0+1.0;
0
_13th_Dragon napisał(a):

Ponieważ kompilator zastąpi ten pierwszy tym:

    for(auto const &x:vec1) vec2[0]=x*2.0+1.0;

Aaaa, racja ;-). Ale głupi błąd ;P.

A czy da się jakoś inaczej sprawdzić, która iteracja jest obecnie wykonywana niż przy pomocy dodatkowej zmiennej?

2

W przypadku wektora możesz sobie sprawdzić &x - &vec1.front(), ale nie polecam tego rozwiązania.

2

Tak, przy pomocy normalnej pętli.
Tej używasz, gdy nie obchodzi Cie indeks elementu.

1

A czy da się jakoś inaczej sprawdzić, która iteracja jest obecnie wykonywana niż przy pomocy dodatkowej zmiennej?

Tak, najlepiej uswiadomic sobie, ze wiedza o tym, ktora iteracja jest wykonywana jest w 95% przypadkow niepotrzebna, wtedy problem zniknie.

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