Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywołanie funkcji z Vector

Ostatnio zmodyfikowano 2017-05-27 09:43
Autor Wiadomość
wokub
Temat założony przez niniejszego użytkownika
Wywołanie funkcji z Vector
» 2017-05-26 16:21:28
Na wstępie, obiecuję, że to ostatnie pytanie :D

Mam zrobić funkcję zerującą elementy wektora. Póki co mam taki kod i próbuję wywołać funkcję z wektorem. Jak tego nie wypiszę, to wywala mi błąd:
C/C++
#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>

using namespace std;

void zeruj( vector < double > v )
{
    return fill( v.begin(), v.end(), 0 );
}

int main()
{
   
    int x = 2;
    vector < double > w;
    w.reserve( x );
    w.push_back( 2 );
    w.push_back( 5 );
   
    for( vector < double >::const_iterator i = w.begin(); i != w.end(); ++i )
         std::cout << * i << ' ';
   
    zeruj( w );
   
    //jakiego bym nie dał cout-a, to i tak jest błąd dot. wywołania funkcji
   
    return 0;
}



P-161610
pekfos
» 2017-05-26 17:18:51
Przekazuj wektor przez referencję.
P-161612
wokub
Temat założony przez niniejszego użytkownika
» 2017-05-26 17:32:16
Ugh, wskaźniki, referencje... Nienawidzę. Ale spróbujmy. Dzięki :D

void zeruj( vector < double > & v )
 nie za bardzo coś zmienia.Gdziekolwiek dam referencję, zawsze jakiś błąd. Chodzi mi o to, czy jest możliwość zmienić ten kod w ten sposób, aby można było wypisać ten wyzerowany wektor zwykłym
cout << zeruj( w ) << endl;
? Czy dla wektora nie ma takiej opcji?
P-161613
pekfos
» 2017-05-26 18:48:38
Jakim cudem ta funkcja miałaby zmienić zachowanie cout? Jak chcesz tego efektu, musisz przeciążyć operator <<.
P-161617
wokub
Temat założony przez niniejszego użytkownika
» 2017-05-26 18:51:25
Też fakt. Dobra, poszedłem w kierunku
( auto i: & v )
 itp, mimo, że chciałem uniknąć stosowania formatu C++98. Dzięki za pomoc, zawsze ciut poczytałem i coś zostało.
P-161618
Monika90
» 2017-05-26 18:58:05
Jeżeli chcesz zwrócić wektor z funkcji, to po prostu go zwróć
C/C++
vector < double > zeruj( vector < double > v )
{
    fill( v.begin(), v.end(), 0 );
    return v;
}

Teraz to zadziała
C/C++
cout << zeruj( w ) << endl;
P-161620
wokub
Temat założony przez niniejszego użytkownika
» 2017-05-26 20:08:42
C/C++
#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>

using namespace std;

vector < double > zeruj( vector < double > v )
{
    return fill( v.begin(), v.end(), 0 );
}

int main()
{
   
    int x = 2;
    vector < double > w;
    w.reserve( x );
    w.push_back( 2 );
    w.push_back( 5 );
   
    for( vector < double >::const_iterator i = w.begin(); i != w.end(); ++i )
         std::cout << * i << ' ';
   
    cout << zeruj( w );
   
    return 0;
}

Tak? Niestety nie działa, to by było zbyt piękne :D Chyba musiałbym przeciążyć operator, bo błąd dotyczy <<
P-161624
Monika90
» 2017-05-26 20:32:31
Ale wpadka... No właśnie, żeby dało się wydrukować wektor należy przeciążyć operator <<.
P-161625
« 1 » 2
  Strona 1 z 2 Następna strona