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: #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 ); return 0; }
|
|
pekfos |
» 2017-05-26 17:18:51 Przekazuj wektor przez referencję. |
|
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? |
|
pekfos |
» 2017-05-26 18:48:38 Jakim cudem ta funkcja miałaby zmienić zachowanie cout? Jak chcesz tego efektu, musisz przeciążyć operator <<. |
|
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. |
|
Monika90 |
» 2017-05-26 18:58:05 Jeżeli chcesz zwrócić wektor z funkcji, to po prostu go zwróć vector < double > zeruj( vector < double > v ) { fill( v.begin(), v.end(), 0 ); return v; }
Teraz to zadziała cout << zeruj( w ) << endl;
|
|
wokub Temat założony przez niniejszego użytkownika |
» 2017-05-26 20:08:42 #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 << |
|
Monika90 |
» 2017-05-26 20:32:31 Ale wpadka... No właśnie, żeby dało się wydrukować wektor należy przeciążyć operator <<. |
|
« 1 » 2 |