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 |