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

question-closed c++ sortowanie bąbelkowe na wektorach

Object Storage Arubacloud
0 głosów
825 wizyt
pytanie zadane 2 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)
zamknięte 2 lutego 2021 przez Kamirru9

Mam problem z kodem sad
Teoretycznie jak go czytam wygląda, że działa.
Próbowałem go zmieniać na różne sposoby, jednak to nic nie daje frown
 

#include <iostream>
#include <vector>

using namespace std;

vector <int> tab;

bool sp(vector <int> tab[]){
    unsigned int l=tab.size();
    for(int i=0;i<tab.size();i++)
        if(tab[i]>tab[i+1])
            return false;
    return true;

}

void sb(vector <int> tab[]){
    int l=tab.size();
    while(sp(tab[])==false){
        for(int i=0;i<tab.size();i++)
            if(tab[i]>tab[i+1]){
                int temp=tab[i+1];
                tab[i+1]=tab[i];
                tab[i]=temp;
            }
    }
}

void wys(vector <int> tab[]){
    int l=tab.size();
    for(int i=0;i<l;i++)
        cout << " "<< tab[i] <<" ";
    cout<< endl;
}

int main()
{
    int q1,q;
    cout << "Ile liczb do tablicy ?" << endl;
    cin >>q1;
    for(int i=0;i<q1;i++){
        cout << "Podaj liczbe nr "<<i<<" do tablicy" << endl;
        cin >>q;
        tab.push_back(q);
    }
    wys(tab[])
    cout << "/\\ bez sort /\\" << endl;
    sb(tab);
    wys(tab);
    cout << "/\\ po sort /\\" << endl;
    system("pause");
    return 0;
}

Jeśli to ma znaczenie programuje w Code::Blocks 20.03.

komentarz zamknięcia: tkz pomógł i już działa
komentarz 2 lutego 2021 przez tkz Nałogowiec (42,000 p.)
Dlaczego przesyłasz tablicę vektorów do funkcji?
komentarz 2 lutego 2021 przez Kamirru9 Początkujący (300 p.)
Bo chcę ją posortować
komentarz 2 lutego 2021 przez tkz Nałogowiec (42,000 p.)
std::vector to tablica sama w sobie, a Ty wysyłasz tablice vectorów. std::vector[]. Widzisz różnicę?
komentarz 2 lutego 2021 przez Kamirru9 Początkujący (300 p.)
Nie, próbowałem zrobić to przez taką deklarację - " bool sp(int tab[]){ ", ale wtedy nie działają metody z biblioteki vector. Z tego co pamiętam to tablice i tak się nie kopiują, więc nie trzeba dodawać &, aby pracować na oryginale.
komentarz 2 lutego 2021 przez tkz Nałogowiec (42,000 p.)
vector <int> tab[] taki zapis oznacza, że masz tablice vectorów. vector <int> tab to jest jeden vector. Mylisz kompletnie pojęcia.

https://cpp0x.pl/kursy/Kurs-C++/Poziom-5/Kontener-std-vector/588
komentarz 2 lutego 2021 przez Kamirru9 Początkujący (300 p.)
Link do cpp0x mi nie pomógł :/
Ja tylko potrzebuję poprawnie "wstrzyknąć" wektora do funkcji, przy czym chciałbym pracować na oryginalnej tablicy.

Co mam wpisać w miejsce $$$, aby osiągnąć zamierzony rezultat ?
bool sp( $$$ ){...
komentarz 2 lutego 2021 przez tkz Nałogowiec (42,000 p.)
Jeżeli chcesz przekazać oryginał i go modyfikować to std::vector<int>& vec. Jeżeli kopie std::vector<int> vec. Jeżeli nie chcesz go modyfikować, to const std::vector<int>& vec.
komentarz 2 lutego 2021 przez Kamirru9 Początkujący (300 p.)

Super, dziękuję działa, tylko jeszcze nie wiem skąd mi się bierze 5 element... 
tak to wygląda w konsoli:
 

Ile liczb do tablicy ?
4
Podaj liczbe nr 1 do tablicy
1
Podaj liczbe nr 2 do tablicy
3
Podaj liczbe nr 3 do tablicy
2
Podaj liczbe nr 4 do tablicy
4
 1  3  2  4  -86711502
/\ bez sort /\
 -86711502  1  2  3  4
/\ po sort /\
Press any key to continue . . .

 

komentarz 2 lutego 2021 przez tkz Nałogowiec (42,000 p.)
Wychodzisz poza zakres tablicy, użyj .at(), rzuci wyjątek, gdy nastąpi wcześniej wspomniane zdarzenie. Mała podpowiedź, zauważ, że  gdy mamy tablice 4 elementową, to [i+1] gdy i = 3, da nam 4, czy out of range.
komentarz 2 lutego 2021 przez Kamirru9 Początkujący (300 p.)

Jeszcze raz dzięki, kombinowałem też, ale okazało się, że jak zmienię tylko przy jednej funkcji - to i tak 2 funkcja wywoła kolejny element nieistniejący element tworząc go. Zmieniłem w obu i wszystko śmiga laugh.

1 odpowiedź

+1 głos
odpowiedź 2 lutego 2021 przez Kamirru9 Początkujący (300 p.)

Podsyłam działający kod wink
I tym samym zamykam temat 

 

#include <iostream>
#include <vector>

using namespace std;

vector <int> tab;

bool sp(vector<int>& tab){
    for(int i=0;i<tab.size()-1;i++)
        if(tab[i]>tab[i+1])
            return false;
    return true;
}
void sb(vector<int>& tab){
    while(sp(tab)==false){
        for(int i=0;i<tab.size()-1;i++)
            if(tab[i]>tab[i+1]){
                int temp=tab[i];
                tab[i]=tab[i+1];
                tab[i+1]=temp;
            }
    }
}
void wys(vector<int>& tab){
    for(int i=0;i<tab.size();i++)
        cout << " "<< tab[i] <<" ";
    cout<< endl;
}
int main()
{
    int q1,q;
    cout << "Ile liczb do tablicy ?" << endl;
    cin >>q1;
    for(int i=0;i<q1;i++){
        cout << "Podaj liczbe nr "<<i+1<<" do tablicy" << endl;
        cin >>q;
        tab.push_back(q);
    }
    wys(tab);
    cout << "/\\ bez sort /\\" << endl;
    sb(tab);
    wys(tab);
    cout << "/\\ po sort /\\" << endl;
    system("pause");
    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 1,124 wizyt
pytanie zadane 12 czerwca 2020 w C i C++ przez ania1210 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 357 wizyt
pytanie zadane 25 sierpnia 2019 w C i C++ przez martin1724 Użytkownik (690 p.)
0 głosów
1 odpowiedź 574 wizyt
pytanie zadane 24 października 2021 w C i C++ przez pita Nowicjusz (180 p.)

92,669 zapytań

141,567 odpowiedzi

320,034 komentarzy

62,034 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...