pętla for (zagnieżdzona)

pętla for (zagnieżdzona)
BA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Witam,

czy się różni petla taka:

Kopiuj

for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> tablica[a];
a++;
}
}

Kopiuj

od takiej:

Kopiuj

for (int i = 0; i < N * N; i++) {
cin >> tablica[a];
a++;
}

Kopiuj

spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
7

Ty nam powiedz

Kopiuj
#include <iostream>
using namespace std;

int main() {
#define N 20
	int array[N*N];
	
	size_t a = 0;
	for(size_t i = 0; i < N*N; ++i)
		cin >> array[a++];
	return 0;
}

|

Kopiuj
#include <iostream>
using namespace std;

int main() {
#define N 20
	int array[N*N];
	
	size_t a = 0;
	for(size_t i = 0; i < N; ++i)
    	for(size_t j = 0; j < N; ++j)
			cin >> array[a++];
	return 0;
}
Kopiuj
main:
        push    rbp
        push    rbx
        sub     rsp, 1608
        lea     rbp, [rsp+1600]
        mov     rbx, rsp
.L2:
        mov     rsi, rbx
        mov     edi, OFFSET FLAT:std::cin
        add     rbx, 4
        call    std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
        cmp     rbx, rbp
        jne     .L2
        add     rsp, 1608
        xor     eax, eax
        pop     rbx
        pop     rbp
        ret
        sub     rsp, 8
        mov     edi, OFFSET FLAT:std::__ioinit
        call    std::ios_base::Init::Init()
        mov     edx, OFFSET FLAT:__dso_handle
        mov     esi, OFFSET FLAT:std::__ioinit
        mov     edi, OFFSET FLAT:std::ios_base::Init::~Init()
        add     rsp, 8
        jmp     __cxa_atexit

|

Kopiuj
main:
        push    r12
        push    rbp
        push    rbx
        sub     rsp, 1600
        lea     r12, [rsp+1600]
        mov     rbx, rsp
.L3:
        lea     rbp, [rbx+80]
.L2:
        mov     rsi, rbx
        mov     edi, OFFSET FLAT:std::cin
        add     rbx, 4
        call    std::basic_istream<char, std::char_traits<char> >::operator>>(int&)
        cmp     rbp, rbx
        jne     .L2
        cmp     rbp, r12
        mov     rbx, rbp
        jne     .L3
        add     rsp, 1600
        xor     eax, eax
        pop     rbx
        pop     rbp
        pop     r12
        ret
        sub     rsp, 8
        mov     edi, OFFSET FLAT:std::__ioinit
        call    std::ios_base::Init::Init()
        mov     edx, OFFSET FLAT:__dso_handle
        mov     esi, OFFSET FLAT:std::__ioinit
        mov     edi, OFFSET FLAT:std::ios_base::Init::~Init()
        add     rsp, 8
        jmp     __cxa_atexit

(x86 gcc 5.2.0 z -O3)
https://www.diffchecker.com/ktyseevk

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

tym że w drugiej niepotrzebna ta zmienna a można użyć i

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

w pierwszym wypadku a można zamienić na i a w drugim a można zamienić na i*N+j

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Niikelion napisał(a):

w pierwszym wypadku a można zamienić na i a w drugim a można zamienić na i*N+j

O ile w jednym przypadku zamiana a na i przyspieszy program,
o tyle w drugim przypadku zamiana a na i*N+j spowolni program.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.