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ść
Dawidsoni
Temat założony przez niniejszego użytkownika
» 2011-10-29 22:24:08
Dzięki, działa, ale to dziwne, że kod:
C/C++
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ę.
P-43038
DejaVu
» 2011-10-29 22:26:02
W kursie jest opisana zasada działania strumienia (» Kurs C++ » Poziom 1Obsługa strumienia wejściowego lekcja).
P-43039
Drraven
» 2011-10-30 06:30:56
btw. Pobierz sobie program do sprawdzania tego. Nazywa się 'ocen-windows' i ocen-linux
P-43047
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
C/C++
#include <vector>

int main()
{
    vector < int > tablica_dynamiczna;
    return 0;
}

Operator new
C/C++
int main()
{
    int * tablica_alokowana_dynamicznie = new int[ ROZMIAR_TABLICY ];
}
P-79283
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ć.
P-79292
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:
C/C++
#include <vector>

int main()
{
    vector < int > tablica_dynamiczna;
    tablica_dynamiczna.reserve( ROZMIAR_TABLICY );
    return 0;
}
P-79293
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ę)
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 ) );
}
(jak kompilator to zoptymalizuje i całkiem wywali to liczenie to trzeba też wypisać gdzieś tego tempa)
P-79295
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.
P-79296
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona