Przesyłanie własnego obiektu do funkcji
Ostatnio zmodyfikowano 2017-12-07 13:04
Masterpc16 Temat założony przez niniejszego użytkownika |
Przesyłanie własnego obiektu do funkcji » 2017-12-07 10:51:57 Witam po dwóch latach pracy w javie czas na powrót do c++. Moim zadaniem było napisanie programu który sortuje 10 książek, po tytule, autorze oraz liczbie stron (każde sortowanie osobno), oczywiście mam własną klasę Book. Wszystko u mnie działa :) ale pytanie mam o zwalnianie pamięci. bool bubbleSort( std::vector < Book > & a, Comparator & comparator ) { bool swapped; int temp; int end = a.size() - 1; for( int i = 0; i < a.size(); i++ ) { swapped = false; for( int j = 0; j < end; j++ ) { if( !comparator.compare( a[ j ], a[ j + 1 ] ) ) { swapped = true; temp = j; std::swap( a[ j ], a[ j + 1 ] ); } } end = temp; if( !swapped ) break; } return true; }
tak wygląda moja klasa która jest odpowiedzialna za sortowanie, przekazuję jej referencję do tablicy oraz referencję do komparatora. Wywołuję ją w następujący sposób vector < Book > books;
books.push_back( * new Book( "Boska Komedia", "Dante Alighieri", 666 ) ); books.push_back( * new Book( "Dawca i przysiegi", "Brandon Sanderson", 2103 ) ); books.push_back( * new Book( "Terapia", "Kathryn Perez", 1530 ) ); books.push_back( * new Book( "Jak zawsze", "Zygmunt Miłoszewski", 1414 ) ); books.push_back( * new Book( "Większość bezwzględna", "Remigiusz Mróz", 1190 ) ); books.push_back( * new Book( "Oskar i Pani Róża", "Eric-Emmanuel Schmitt ", 50268 ) ); books.push_back( * new Book( "Siła, która ich przyciąga", "Brittainy C. Cherry ", 1029 ) ); books.push_back( * new Book( "Ciemna strona", "Tarryn Fisher ", 968 ) ); books.push_back( * new Book( "Pudełko z marzeniami", "Magdalena Witkiewicz, Alek Rogoziński ", 838 ) ); books.push_back( * new Book( "Psiego najlepszego. Był sobie pies na święta", "W. Bruce Cameron ", 660 ) );
bubbleSort( books, * new PageComparator() );
a tak cyszczę pamięć po wektorze for( int i = 0; i < books.size(); i++ ) { delete books[ i ]; } books.clear();
a jak mam wyczyścić pamięć bo obiekcie ```*new PageComparator()``` ? oraz czy dobrze przekazuję ten obiekt do funckji ? Kod do całego projektu jest na moim githubie gdyby potrzebny był wgląd do innych plików https://github.com/Masterpc96/zadanie_3 |
|
darko202 |
» 2017-12-07 11:32:34 |
|
Monika90 |
» 2017-12-07 11:44:44 To się nie skompiluje, przecież elementami vectora books nie są wskaźniki. A tak w ogóle, nie używaj new bez potrzeby. |
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2017-12-07 12:16:55 mi się kompiluje :) to jak mam dodać nowy obiekt do kontenera?(swoj obiekt bo prymitywy wiem) Edit: Poprawiłem tworzenie i czyszczenie kontenera robię to teraz tak: vector < Book > books;
books.push_back( Book( "Boska Komedia", "Dante Alighieri", 666 ) ); books.push_back( Book( "Dawca i przysiegi", "Brandon Sanderson", 2103 ) ); books.push_back( Book( "Terapia", "Kathryn Perez", 1530 ) ); books.push_back( Book( "Jak zawsze", "Zygmunt Miłoszewski", 1414 ) ); books.push_back( Book( "Większość bezwzględna", "Remigiusz Mróz", 1190 ) ); books.push_back( Book( "Oskar i Pani Róża", "Eric-Emmanuel Schmitt ", 50268 ) ); books.push_back( Book( "Siła, która ich przyciąga", "Brittainy C. Cherry ", 1029 ) ); books.push_back( Book( "Ciemna strona", "Tarryn Fisher ", 968 ) ); books.push_back( Book( "Pudełko z marzeniami", "Magdalena Witkiewicz, Alek Rogoziński ", 838 ) ); books.push_back( Book( "Psiego najlepszego. Był sobie pies na święta", "W. Bruce Cameron ", 660 ) );
books.clear();
a co w związku z czyszczeniem pamięci po obiekcie *new PageComparator() |
|
Monika90 |
» 2017-12-07 12:47:03 Nie wiem nic o prymitywach. Tak można zainicjalizować wektor vector < Book > books = { Book { "Boska Komedia", "Dante Alighieri", 666 }, Book { "Dawca i przysiegi", "Brandon Sanderson", 2103 }, Book { "Terapia", "Kathryn Perez", 1530 }, };
A dodać do już istniejącego wektora tak: books.push_back( Book { "Boska Komedia", "Dante Alighieri", 666 } );
|
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2017-12-07 12:51:32 @Moika90 poprawiłem już kod a co w związku z czyszczeniem miejsca po obiekcie komparatora? |
|
Monika90 |
» 2017-12-07 12:59:16 PageComparator cmp; bubbleSort( books, cmp );
Jakbyś poprawił inne błędy to mogłoby być tak bubbleSort( books, PageComparator() );
|
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2017-12-07 13:04:45 Zrobiłem pierwszym sposobem, dzięki za pomoc :) więcej błędów już chyba nie ma :) |
|
« 1 » |