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 |