McAffey Temat założony przez niniejszego użytkownika |
sort nie działa » 2011-02-04 21:02:37 Witam. Piszę jakiś tam program, który na końcu sortuje to co tam wyliczył. Problem w tym, że funkcja sort mi nie działa. Wyodrębniłem z kodu tylko część związaną z tym sortowaniem : #include <iostream> #include <vector> #include <iomanip> #include <algorithm> using namespace std;
int main() { vector < int > zmienna; zmienna.push_back( 0 ); zmienna[ 0 ] = 2; zmienna[ 1 ] = 3; zmienna[ 2 ] = 1; zmienna[ 3 ] = 0; zmienna[ 4 ] = 2; sort( zmienna.begin(), zmienna.end() ); cout << zmienna[ 0 ] << endl << endl; cout << zmienna[ 1 ] << endl << endl; cout << zmienna[ 2 ] << endl << endl; cout << zmienna[ 3 ] << endl << endl; cout << zmienna[ 4 ] << endl; cout << endl; system( "PAUSE" ); return 0; } I to wypisuje mi wartości tych zmiennych w takiej samej (a powinno w posortowanej) kolejności : 2
3
1
0
2 Dodam, że jak przypisywanie wykonałem za pomocą funkcji push_back(); to posortowało się dobrze, sęk w tym, że w tym głównym programie przypisywanie muszę wykonać tak jak w ww kodzie, ponieważ wygląda to tam tak: for( int i = 0 i < n; i++ ) { zmienna[ x ] = zmienna[ x ] + c[ i ]; } insert(); też odpada, ponieważ on za każdym razem powiększa tablicę, a to uniemożliwia poprawne działanie mojego programu. Potraficie coś poradzić na ten problem ? Z góry dziękuję i pozdrawiam ;) |
|
DejaVu |
» 2011-02-04 21:10:11 Piszesz poza zakresem tablicy - ciesz się że program w kosmos nie wyleciał. Jest metoda taka jak reserve, za pomocą której określasz ile ma być minimum dostępnych elementów w tablicy. |
|
dmx81 |
» 2011-02-04 21:48:01 dokladnie, wektor masz o rozmiarze 1 po pierwszej operacji push_back(), a pozniej odwolujesz sie do jego "kolejnych elementow", ktore de facto do niego nie naleza - czyli piszac zmienna.begin() i zmienna.end() pewnie operujesz na jednoelementowym wektorze - sprobuj zamiast zmienna[ liczba1 ] = liczba2
zmienna.push_back( liczba2 );
dla kazdej pozycji wektora |
|
malan |
» 2011-02-04 21:58:42 int n; std::vector < int > numbers;
std::cin >> n; numbers.resize( n );
|
|
McAffey Temat założony przez niniejszego użytkownika |
» 2011-02-04 22:27:43 Dzięki, już sobie poradziłem. Ponieważ tamta pętla którą pokazałem w pierwszym poście jest jeszcze w jednej pętli, to zrobiłem tak, że w tej drugiej pętli dałem zmienna.push_back( 0 ); i wtedy za każdym razem jak wracało do pętli z pierwszego postu to już wtedy wektor miał odpowiednią ilość elementów. Dzięki wielkie za pomoc ;) Pozdrawiam |
|
dmx81 |
» 2011-02-04 22:27:50 jak kolega wyzej, nie wiem dlaczego nie zapisalo sie to, co edytowalem :( czasem sie zdarza, ze dam na edytuj, pozniej na wyslij (czy na zapisz, nie pamietam) - pokazuje mi sie podglad wiadomosci u gory - powyzej okna edycji tekstu, a pozniej nie ma mojej poprawionej wiadomosci, tylko ta pierwsza
a pisze, bo pisalem o tym, ze jesli z gory zna sie ilosc elementow, to mozna wektor.resize(rozmiar), a pozniej odwolac sie juz tak jak piszesz, ze musisz, czyli przez wektor -> bo bez tego, moj post powyzej wyglada nijak:P bo napisales, ze uzywales juz push_back, nie wazne z reszta juz, napisz, czy te rozwiazania ci pomogly |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2011-02-05 01:05:24 Ale hece, musiałeś mieć okno pisania nowej wiadomości otwarte a ja w między czasie zamknąłem temat i wyszło, że napisałeś do zamkniętego, bo jak zamknąłem, to jeszcze zobaczyłem czy czyjejś wiadomości nie uciąłem, teraz coś jeszcze sprawdzałem w tym temacie a on wciąż był zamknięty a pojawił się twój post, albo jakiś moderator jeszcze go otwierał albo Panie Piotrze, nowy boog znaleziony ;) |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2011-02-05 01:05:42 test
edit: Zgadza się, otworzyłem w nowej karcie "Napisz nową wiadomość" a na tej zamknąłem temat, upewniłem się, że jest zamknięty i na tamtej karcie napisałem "test" i zrobiłem "Zapisz zmiany" i temat się nie otworzył, a post się pojawił. Niewielki błąd, ale może go Pan sobie dopisać do listy TODO ;) |
|
« 1 » 2 |