• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Biblioteka <vector>. Jak wypisać wyniki malejąco?

0 głosów
393 wizyt
pytanie zadane 28 lipca 2016 w C i C++ przez SebekMakaron Obywatel (1,290 p.)

Witam potrzebuje pomocy z rozwiązaniem tego zadania ogólnie wyświetla wyniki dodaje kolejne elementy. Potrzebuje wypisać wyniki od największego do najmniejszego a nie w kolejności dodawanej. Mam dwa przypuszczenia jedno to sortowanie a drugie to dodanie w odpowiednie miejsce elementu (wciśniecie go pomiędzy już istniejące elementy). Problem polega na tym że nie wiem jak napisać coś w tym stylu.

#include <iostream>
#include <vector>

using namespace std;

void Wypisz(vector<int> lista)
{
     cout<<endl<<"Lista wynikow:"<<endl;
     for(vector<int>::iterator itr = lista.begin(), koniec = lista.end();
           itr != koniec; itr++)
           {
                cout<<*itr<<endl;
           }
     cout<<endl;
}

int main()
{
     vector<int> wynik;
     bool prawda = true;
     int i = 0;
     int score, wybor;

     while(prawda)
     {
          cout<<"1.Dodaj nowy wynik"<<endl<<"0.Wyjscie"<<endl<<"Wybor: ";
          cin>>wybor;

          if(wybor == 1)
          {
               cout<<"Podaj wynik: ";
               cin>>score;
               wynik.push_back(i);
               wynik[i] = score;
               i++;
               Wypisz(wynik);
          }else
               prawda = false;
     }

     wynik.clear();
     return 0;
}

 

2 odpowiedzi

+3 głosów
odpowiedź 28 lipca 2016 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 28 lipca 2016 przez SebekMakaron
 
Najlepsza
  1. Użyj funkcji sort.
  2. Użyj iteratora odwróconego (reverse_iterator), aby wypisać dane od końca.
komentarz 28 lipca 2016 przez SebekMakaron Obywatel (1,290 p.)

Oto pełna lista kroków:

1. #include <algorithm>

2. std::sort(lista.begin(), lista.end()); Tak, tylko tyle

3. std::reverse(lista.begin(),lista.end()); 

Zaznacze w tym miejscu że pomoc udzielana w takim stylu jak zrobił to 'Patrycjerz' jest naprawdę przydatna pozwala pomyśleć i samemu odnaleźć potrzebne funkcjie, wstawić odpowiednie argumenty i dzięki temu rozwijać się. Dzięki za pomoc.

+3 głosów
odpowiedź 28 lipca 2016 przez MetGang Nałogowiec (34,360 p.)

Po pierwsze, zawsze przesyłaj std::vector jak i inną klasę złożoną (de facto wszystko poza prymitywami) za pomocą const referencji (const std::vector<int>& vec). Nie ma sensu go kopiować tylko do wypisania.

Co do sortowania na vektorze:

std::vector<int> v = {1,8,4,5,6};
std::sort(v.begin(),v.end(),[](int x, int y){ return x>y; });

Lub możesz też użyć setu:

std::set<int,std::greater<int>> s = {1,8,4,5,6};

Oba po wypisaniu dadzą wynik 8 6 5 4 1.

komentarz 28 lipca 2016 przez adrian17 Mentor (354,120 p.)

Odrobinę krócej:

std::sort(v.begin(), v.end(), std::greater<>());

 

Podobne pytania

0 głosów
1 odpowiedź 371 wizyt
pytanie zadane 21 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 24 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
0 głosów
2 odpowiedzi 595 wizyt
pytanie zadane 31 marca 2017 w C i C++ przez Milesq Nałogowiec (32,020 p.)

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...