pętla for (zagnieżdzona)

Odpowiedz Nowy wątek
2015-12-10 19:15

Rejestracja: 4 lata temu

Ostatnio: 4 lata temu

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

Pozostało 580 znaków

2015-12-10 19:23

Rejestracja: 6 lat temu

Ostatnio: 3 godziny temu

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

edytowany 4x, ostatnio: spartanPAGE, 2015-12-10 19:28
Jakżeś zrobił taką ładną tabelkę?! - Silv 2015-12-11 21:57
W pasku narzędzi są zqykłe tabelki, do których można pchać znaczkiki code; Tylko uwaga, łatwo się krzaczy ;) - spartanPAGE 2015-12-12 08:25

Pozostało 580 znaków

2015-12-10 21:55

Rejestracja: 14 lat temu

Ostatnio: 10 godzin temu

1

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-12-10 21:57

Rejestracja: 6 lat temu

Ostatnio: 4 miesiące temu

Lokalizacja: Warszawa

0

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


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany

Pozostało 580 znaków

2015-12-10 22:00

Rejestracja: 14 lat temu

Ostatnio: 10 godzin temu

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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
i w obu przypadkach będzie mniej pamięci zajętej a drugi kod zajmie więcej pamięci niż pierwszy - Niikelion 2015-12-10 22:07
Na normalnych komputerach nie ma co martwić się o 4 bajty - bo trudno znaleźć komputer który ma mniej niż GB, na urządzeniach raczej martwiłbym się o prędkość. - _13th_Dragon 2015-12-10 22:11
martwiąc się o prędkość nie pisałbyś 2 pętli for dla tablicy jednowymiarowej i używał oddzielnej zmiennej przechowującej index... - Niikelion 2015-12-10 22:20
To zależy, wpisz ka mi do takiej jednowymiarowej N*N tabliczkę mnożenia dla 1..N na jednej pętli ;P (owszem da się ale kompletny koszmar prędkościowy z dzieleniem i moduło). - _13th_Dragon 2015-12-10 22:34
@Niikelion tylko ze dwie petle moga byc szybsze od jednej http://stackoverflow.com/ques[...]so-much-slower-than-two-loops Dlatego optymalizowac nalezy waskie gardla a nie od razu bo moze sie okazac, ze wyjdzie tak inaczej niz zakladamy. (chyba, ze ktos bardzo dobrze rozumie co sie dzieje "za scena") - fasadin 2015-12-11 08:01

Pozostało 580 znaków

Odpowiedz

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