Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Insert vectora nie zwraca iteratora

Ostatnio zmodyfikowano 2017-07-08 20:23
Autor Wiadomość
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.

C/C++
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 );
        }
    }
}
P-163103
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.
P-163121
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()".
P-163123
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.
P-163124
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
P-163125
DejaVu
» 2017-07-08 18:18:06
Użyj users.push_back(...); jeżeli chcesz wstawić element na końcu.

http://cpp0x.pl/dokumentacja​/standard-C++/vector/insert/852
P-163135
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..
P-163136
pekfos
» 2017-07-08 19:56:31
Kompilujesz w konfiguracji do debugowania?
P-163138
« 1 » 2
  Strona 1 z 2 Następna strona