web-dev-qa-db-fra.com

Initialiser un vecteur vide dans la structure - c ++

J'ai un struct:

typedef struct user {
    string username;
    vector<unsigned char> userpassword;
} user_t;

J'ai besoin d'initialiser userpassword avec un vector vide:

struct user r={"",?};

Que dois-je mettre à la place de ??

22
Tomasz

std::string Et std::vector<T> Ont tous deux des constructeurs initialisant l'objet pour qu'il soit vide. Vous pouvez utiliser std::vector<unsigned char>() mais je supprimerais l'initialiseur.

24
Dietmar Kühl

Comme ça:

#include <string>
#include <vector>

struct user
{
    std::string username;
    std::vector<unsigned char> userpassword;
};

int main()
{
    user r;   // r.username is "" and r.userpassword is empty
    // ...
}
10
Kerrek SB

Que diriez-vous

user r = {"",{}};

ou

user r = {"",{'\0'}};

ou

user r = {"",std::vector<unsigned char>()};

ou

user r;
7
Luchian Grigore

Le constructeur vectoriel par défaut créera un vecteur vide. À ce titre, vous devriez pouvoir écrire:

struct user r = { string(), vector<unsigned char>() };

Remarque, j'ai également utilisé le constructeur de chaîne par défaut au lieu de "".

Vous voudrez peut-être envisager de faire de l'utilisateur une classe et d'ajouter un constructeur par défaut qui le fera pour vous:

class User {
  User() {}
  string username;
  vector<unsigned char> password;
};

Puis il suffit d'écrire:

User r;

Se traduira par un utilisateur correctement initialisé.

1
dma