Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-10-29 22:24:08 Dzięki, działa, ale to dziwne, że kod: for( int i = 0; i < n; ++i ) { int liczba; scanf( "%d", & liczba ); cout << liczba << endl; } powoduje, że program wygląda tak: 10 (ilość liczb) 12 15 18 20 (wczytanie 4 liczb po spacjach) 12 (wypisanie) 15(wypisanie) 18(wypisanie) 20(wypisanie) ...
Z kodu wynika, że najpierw powinien wczytać 1 liczbę, potem ją wypisać, potem wczytać następną, ale potrafi wczytać 4 naraz! Mi to jest zresztą obojętne. Nie będę wypisywał liczb, tylko je porównywał. To chyba dlatego tak robi zresztą, bo 1 strumień czeka, aż 2 skończy swoją pracę. |
|
DejaVu |
» 2011-10-29 22:26:02 |
|
Drraven |
» 2011-10-30 06:30:56 btw. Pobierz sobie program do sprawdzania tego. Nazywa się 'ocen-windows' i ocen-linux |
|
McAffey |
Podpinam » 2013-03-24 10:35:24 Mam pytanie pasujące do tematu, więc się podpinam : co jest bardziej wydajne - czy lepiej tworzyć dynamiczne tablice za pomocą vectora (stl jest dopuszczony) czy może lepiej za pomocą operatora new ? Dla przyszłych czytających małe zobrazowanie : Vector#include <vector>
int main() { vector < int > tablica_dynamiczna; return 0; } Operator newint main() { int * tablica_alokowana_dynamicznie = new int[ ROZMIAR_TABLICY ]; } |
|
ison |
» 2013-03-24 11:34:20 Czyste tablice zawsze będą szybsze od korzystania z gotowych kontenerów z STL, zwłaszcza gdy będziesz w nich trzymał ~10^6+ elementów i musiał po nich iterować. Różnice w czasie mogą być całkiem spore, na OIu można było nawet za to punkty stracić. |
|
pekfos |
» 2013-03-24 11:36:48 Pytanie z kategorii "Co jest lepsze, Win95 czy najnowsze Ubuntu?". Zapomniałeś, że vector będzie wielokrotnie kopiował elementy przy dodawaniu. Tak powinien wyglądać pierwszy kod: #include <vector>
int main() { vector < int > tablica_dynamiczna; tablica_dynamiczna.reserve( ROZMIAR_TABLICY ); return 0; } |
|
ison |
» 2013-03-24 11:43:08 @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 ) ); }
(jak kompilator to zoptymalizuje i całkiem wywali to liczenie to trzeba też wypisać gdzieś tego tempa) |
|
McAffey |
» 2013-03-24 11:58:02 Czyste tablice zawsze będą szybsze od korzystania z gotowych kontenerów z STL |
Tak właśnie myślałem, dzięki :) No i zawsze to troszkę mniej ładowania, bo nie trzeba dodatkowej biblioteki includować. A różnica w wydajności rzeczywiście jest bardzo odczuwalna, na Twoim prowizorycznym teście pokazuje nawet dwa razy dłużej. |
|
1 « 2 » 3 |