Insert vectora nie zwraca iteratora
Ostatnio zmodyfikowano 2017-07-08 20:23
Gravity Temat założony przez niniejszego użytkownika |
Insert vectora nie zwraca iteratora » 2017-07-08 10:14:15 Witam, tworzę taki "mini" chat konsolowy i natrafiłem na jeden problem. Mianowicie funkcja insert w każdym możliwym przypadku nie zwraca iteratora ponieważ podczas debugowania usIter wynosi <NULL> oraz po tej funkcji dziwnym trafem vector ma wielkość , która na pewno nie odpowiada liczbie elementów , którą powinien zawierać. Po powrocie z funkcji do głównej funkcji wątku jest tyle elementów ile powinno być. Nie mam pojęcia czym jest to spowodowane. void checkNick( SOCKET sock, std::vector < std::string > packet, std::vector < User > & users, std::vector < User >::iterator & usIter ) { if( users.empty() ) { User tempUser; tempUser.setNick( packet[ 1 ] ); usIter = users.insert( users.end(), tempUser ); std::string packet = encryptPacket( "NICK OK" ); send( sock, packet.c_str(), packet.size(), 0 ); } else { bool isused = false; for( auto user: users ) { if( packet[ 1 ] == user.getNick() ) { std::string packet = encryptPacket( "NICK This nick is already used!" ); send( sock, packet.c_str(), packet.size(), 0 ); isused = true; } } if( !isused ) { User tempUser; tempUser.setNick( packet[ 1 ] ); usIter = users.insert( users.end(), tempUser ); std::string packet = encryptPacket( "NICK OK" ); send( sock, packet.c_str(), packet.size(), 0 ); } } }
|
|
DejaVu |
» 2017-07-08 14:00:58 Wstawianie elementów do vectora w innym miejscu niż na końcu jest fatalnym pomysłem. Ten kontener nie jest dostosowany do tego, aby wydajnie wstawiać elementy w środku tablicy. |
|
Gravity Temat założony przez niniejszego użytkownika |
» 2017-07-08 14:20:16 A gdzie tutaj elementy są wstawiane w innym miejscu niż na końcu ????? "users.end()". |
|
pekfos |
» 2017-07-08 14:24:39 A w jaki sposób to sprawdzasz? Jeśli zatrzymałeś program na instrukcji insert, to ta linia jeszcze nie była wykonana. Dodatkowo, jeśli nie masz builda odpowiedniego do debugowania, debugger może pokazywać bzdury. Wstawianie elementów do vectora w innym miejscu niż na końcu jest fatalnym pomysłem. |
Na moje oko wstawia właśnie na koniec. |
|
Gravity Temat założony przez niniejszego użytkownika |
» 2017-07-08 14:45:48 Oczywiście że po tej funkcji sprawdzam jak to się wykonało.
https://image.prntscr.com/image/f5PqV9eWRr6civFeD_89Tw.png |
|
DejaVu |
» 2017-07-08 18:18:06 |
|
Gravity Temat założony przez niniejszego użytkownika |
» 2017-07-08 18:35:15 Jeśli nie widzisz to potrzebuję żeby funkcja zwróciła iterator do tego elementu. A push_back tego nie robi.. |
|
pekfos |
» 2017-07-08 19:56:31 Kompilujesz w konfiguracji do debugowania? |
|
« 1 » 2 |