[C++] Wskaźnik na std::vector
Ostatnio zmodyfikowano 2015-08-24 10:02
Cansisti Temat założony przez niniejszego użytkownika |
[C++] Wskaźnik na std::vector » 2015-08-22 21:23:30 Cześć, chciałbym przekazać w argumencie wskaźnik na kontener std::vector tak żeby mógł być zapamiętany w klasie i żeby później wywoływane metody mogły operować na orginalnym kontenerze. Niestety nie zachowuje się on jak normalna tablica a gdy przekazuję jako std::vector < char > * vec dostaję błąd przy próbie przypisania wartości classvec[ 0 ] = 'a' . Błąd: no match for 'operator=' in '*((KLASA*)this)->KLASA::classvec= 'a''| (gdzie wcześniej przypisuję vec do classvec) |
|
notabigthreat |
» 2015-08-22 21:28:05 Cały kod proszę? |
|
Cansisti Temat założony przez niniejszego użytkownika |
» 2015-08-22 21:38:19 Nieważne, czytałem tutaj http://cpp0x.pl/kursy/Kurs-STL-C++/Kontener-tablicy-std-vector/119 o iteratorze ale niezbyt go rozumiałem. Pokombinowałem i wyszło :) Działający kod: class KLASA { private: std::vector < char >::iterator cvec; public: void setVector( std::vector < char >::iterator v ) { cvec = v; return; } void modVector() { cvec[ 3 ] = 'a'; return; } };
int main() { std::vector < char > vec; KLASA veccls; veccls.setVector( vec.begin() ); veccls.modVector(); return 0; }
|
|
notabigthreat |
» 2015-08-22 21:41:28 BTW, CAPSEM oznaczane są makra, więc nie zdziw się, jak KLASA zostanie podmienione na coś innego. |
|
Cansisti Temat założony przez niniejszego użytkownika |
» 2015-08-22 21:43:35 Zawsze nazywałem swoje klasy z capsa i działało, ale dziękuję za uwagę :) Jaka jest w takim razie konwencja nazywania klas? |
|
pekfos |
» 2015-08-22 22:18:21 Jaka jest w takim razie konwencja nazywania klas? |
Nie capsem. Z częściej widywanych, to nazwa_klasy, lub NazwaKlasy. |
|
RazzorFlame |
» 2015-08-22 22:19:16 Tak to nie działa. Iterator pokazuje na jeden element, więc prędzej (*cvec) = 'a';Jak chcesz ustawic 3 element vectora to musisz miec ten vector. Przyklad: class Klasa { std::vector < char > * VectorPointer; public: Klasa( std::vector < char > * VectorPointerArg ) { VectorPointer = VectorPointerArg; } void DoSomething() { if( VectorPointer ) { ( * VectorPointer )[ 3 ] = 'a'; } } }; int main() { std::vector < char > MyVector( 999 ); Klasa ObiektKlasy( & MyVector ); ObiektKlasy.DoSomething(); return 0; }
|
|
Cansisti Temat założony przez niniejszego użytkownika |
» 2015-08-22 22:40:25 Hmm mi zadziałało w taki sposób w jaki napisałem wyżej (z iteratorem), ale dzięki za sugestię, już wiem czemu nie działało na wskaźniku, nie używałem (*wskaźnik)='a' tylko wskaźnik='a'. Myślę że iterator działa bo przekazuję adres na początek (jakby) tablicy (funckja vector::begin()) więc nie ma problemu żeby odwołać się do kolejnych elementów tak jak przy wskaźniku na zwykłą tablicę. |
|
« 1 » 2 |