Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pytania o zadania z OIG

Ostatnio zmodyfikowano 2013-03-24 15:50
Autor Wiadomość
pekfos
» 2013-03-24 12:03:01
Wiem, że są duże różnice (chociaż przy najniższych optymalizacjach vector i tablica wypadają podobnie). Dodawanie elementów jest niemniej ważne, co iteracja, a dodawanie miliona elementów do vectora, bez zarezerwowania miejsca, to masakra ;)
P-79298
ison
» 2013-03-24 12:13:10
Dodanie miliona intów do vectora bez rezerwacji pamięci to u mnie zaledwie 10 ms.
P-79300
Monika90
» 2013-03-24 13:12:49
W typowych dobrych implementacjach nie ma róznic w szybkości operatora[] dla tablicy dynamicznej i dla std::vector.
U mnie program zamieszczony przez isona daje takie wyniki:
dla Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
>cl -DNDEBUG -D_SECURE_SCL=0 -O2 -EHsc test.cpp
>test
time: 1688 0
time: 1687 0
dla GCC (Built by MinGW-builds project) 4.7.2
>g++ -DNDEBUG -O2 test.cpp
>a
time: 2047 0
time: 1984 0

(jak widać, drukuję też wartośc zmiennej tmp, bo inaczej mingw w ogóle usuwa pętle)
P-79302
pekfos
» 2013-03-24 13:45:40
(jak widać, drukuję też wartośc zmiennej tmp, bo inaczej mingw w ogóle usuwa pętle)
Wystarczy zdefiniować tmp jako volatile ;)
P-79304
domin568
» 2013-03-24 14:05:47
Mam jeszcze takie pytanie do założyciela tematu ( nie związana z tematem ale myśle ze ty mi najlepiej odpowiesz :) ) Czy uczestnik jest zglaszany przez szkołę ? Jak się tam można zakwalifikować ? . Moja nauczycielka od informatyki nie umie nawet programowac w zadnym języku :( . Tez jestem z gimnazjum (1kl ) u was na lekcjach uczucie sie programowac ??
P-79308
pekfos
» 2013-03-24 14:09:37
u was na lekcjach uczucie sie programowac ??
Chyba w Logo ;) Ale to pewnie zależy od szkoły.
P-79309
McAffey
» 2013-03-24 15:27:00
Ja nie jestem założycielem tego tematu, i w olimpiadzie gimnazjalnej nie biorę udziału, ale to chyba jest tak, że oprócz tego że Ty zakładasz sobie konto, to Twój informatyk też musi jakoś szkołę zapisać (ale głowy nie daję). Poczytaj na oig.edu.pl :)
P-79314
Elaine
» 2013-03-24 15:50:13
@pekfos to pytanie akurat nie jest bez sensu. Różnice są znaczące i nie chodzi tu o samo wrzucanie elementów tylko o iterację.

Sprawdź sam (tak, wiem, że na clock(), chodzi mi tylko o procentową różnicę)
C/C++
#include <cstdio>
#include <ctime>
#include <vector>

#define MAX (1000000)

int main()
{
    int * tab1 = new int[ MAX ];
    std::vector < int > tab2( MAX );
   
    time_t start = clock();
    int tmp = 0;
    for( int i = 0; i < 1000; ++i ) {
        for( int j = 0; j < MAX; ++j ) {
            tmp += tab1[ j ];
        }
    }
    printf( "time: %d\n",( int )( clock() - start ) );
    start = clock();
    tmp = 0;
    for( int i = 0; i < 1000; ++i ) {
        for( int j = 0; j < MAX; ++j ) {
            tmp += tab2[ j ];
        }
    }
    printf( "time: %d\n",( int )( clock() - start ) );
}
Dziwne.
>> g++ -O2 /tmp/foo.cpp -o /tmp/foo
>> /tmp/foo
time: 1410000
time: 1170000
P-79315
1 2 « 3 »
Poprzednia strona Strona 3 z 3