Pytania o zadania z OIG
Ostatnio zmodyfikowano 2013-03-24 15:50
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 ;) |
|
ison |
» 2013-03-24 12:13:10 Dodanie miliona intów do vectora bez rezerwacji pamięci to u mnie zaledwie 10 ms. |
|
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) |
|
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 ;) |
|
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 ?? |
|
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. |
|
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 :) |
|
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ę)
#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 |
|
1 2 « 3 » |