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

Użycie wektorów w funkcjach

Object Storage Arubacloud
0 głosów
2,548 wizyt
pytanie zadane 4 czerwca 2016 w C i C++ przez sparklemo7ion Początkujący (360 p.)
Siemka. Dlaczego jak wyślę do funkcji wektor i chce zastosować instrukcję tab.size() / tab.push_back(zmienna) / tab.end() itp. to kompilator wywala mi błąd no np.: error: request for member 'end' in 'tab', which is of non-class type 'int*' ?

Tab jest nazwą wektora oczywiście. Dorzuce, że na razie nie programuje obiektowo gdyż na razie ogarniam podstawy:)
komentarz 4 czerwca 2016 przez draghan VIP (106,230 p.)
Pokaż kod.

2 odpowiedzi

0 głosów
odpowiedź 4 czerwca 2016 przez Avernis Nałogowiec (27,400 p.)

przesyłasz vektora do funkcji tak: 

void func(std::vector<int> zarabistyVector)

Możesz też użyć szablonów funkcji

komentarz 4 czerwca 2016 przez MetGang Nałogowiec (34,360 p.)
void Func(const std::vector<int>& Vec) // tylko do odczytu
void Func(std::vector<int>& Vec) // jeśli chcesz edytować

Jeśli już... przesyłanie vectora poprzez wartość jest nieefektywne i przydatne tylko w konkretnych przypadkach.

komentarz 4 czerwca 2016 przez Avernis Nałogowiec (27,400 p.)
Mój błąd. Zapomniałem że to obiekt a nie tablica
komentarz 4 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Dzięki wam, już wszystko ok :)
0 głosów
odpowiedź 4 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)

Mam jeszcze pytanie co do mojego kodu:

#include <iostream>
#include <ctime> //srand
#include <cstdlib> //rand
#include <vector>
using namespace std;

void sortowanie ( vector <int> &t, int ile)
{
    for ( int j = 0; j < ile; j++)
    {

        for ( int i = 0; i < ile; i++)
        {
            if ( t[i+1] < t[i] )
                swap ( t[i+1], t[i] ); //zamien miejscami
        }

    }
}

void wypisz ( vector <int>& t )
{
      for ( int k = 0; k <= t.size() ; k++)
        cout << k <<". " <<t[k] <<endl;

}


int main ()
{
    srand ( time ( NULL ) ); //wysylamy czas systemowy
    int ile, los;
    double czas;
    clock_t start, stop;
    vector <int> tab;
    cout << "Przedstawie Wam sortowanie wraz z czasem wykonania. Ile losowych liczb chcesz umiescic w tablicy?";
    cin >> ile;
    start = clock();
    for ( int i = 0; i < ile; i++)
    {
        los = (rand () % 10000)+1;
        tab.push_back(los);
        cout << tab[i]<<endl;
    }

    sortowanie ( tab, ile );
    wypisz ( tab );

    stop = clock();
    czas = (double)(stop - start)/CLOCKS_PER_SEC;
    cout << "Czas: " <<czas;
    return 0;
}

Problem jest taki, że gdy podam ile < 14 to przy wypisywaniu zerowy element tablicy = 0. Za to gdy wprowadziłem do zmiennej ile liczbę wiekszą bądź równą 14 to zerowy element tablicy jest ok. Czemu tak jest?

komentarz 4 czerwca 2016 przez draghan VIP (106,230 p.)

Wartość zmiennej ile nie ma żadnego związku z wartościami w wektorze tab.

Masz niepoprawną funkcję sortującą. Indeksy wychodzą poza zakres wektora.

komentarz 4 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
Aaa już wiem gdzie jest błąd. Dzięki kolego, teraz działa ;)

A tak jeszcze jedno pytanko jak jesteśmy przy temacie wektorów..
Lepiej używać wektora jako dynamicznej tablicy, czy może wskaźników? Nie ukrywam, że lepiej pracuje mi się z wektorami :p
komentarz 4 czerwca 2016 przez draghan VIP (106,230 p.)
W kodzie produkcyjnym należy starać się unikać wskaźników, wszystko opakowując w klasy, które samodzielnie zwolnią pamięć w destruktorze.

Po to std::vector jest w bibliotece standardowej, żeby go używać. :)
komentarz 4 czerwca 2016 przez sparklemo7ion Początkujący (360 p.)
A to tym lepiej dla mnie :D Dzięki!

Podobne pytania

0 głosów
1 odpowiedź 470 wizyt
pytanie zadane 30 stycznia 2021 w C i C++ przez Adamek185wp Obywatel (1,280 p.)
0 głosów
0 odpowiedzi 74 wizyt
pytanie zadane 21 lipca 2020 w C i C++ przez kaminie318 Bywalec (2,070 p.)
0 głosów
1 odpowiedź 510 wizyt

92,579 zapytań

141,432 odpowiedzi

319,662 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...