pętla for (zagnieżdzona)

0

Witam,

czy się różni petla taka:


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

od takiej:


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


7

Ty nam powiedz

#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;
}

|

#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;
}
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

|

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

1

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

0

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

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.

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