51 votes

Initialisation du vecteur statique

Je me demande s'il existe une manière "plus agréable" d'initialiser un vecteur statique que ci-dessous ?

 class Foo
{
    static std::vector<int> MyVector;
    Foo()
    {
        if (MyVector.empty())
        {
            MyVector.push_back(4);
            MyVector.push_back(17);
            MyVector.push_back(20);
        }
    }
}

C'est un exemple de code :)

Les valeurs dans push_back() sont déclarées indépendamment ; pas dans le tableau ou quelque chose.

Edit : si ce n'est pas possible, dis le moi aussi :)

30voto

syvex Points 2244

Avec C++11 :

 //The static keyword is only used with the declaration of a static member, 
//inside the class definition, not with the definition of that static member:
std::vector<int> Foo::MyVector = {4, 17, 20};

2voto

Tu peux essayer celui-ci :

 int arr[] = { 1,2,3,4,5,6,7,8,9 };
MyVector.insert(MyVector.begin(), arr, &arr[sizeof(arr)/ sizeof(*arr)]);

Mais cela ne vaut probablement la peine que si vous avez un vecteur très long, et cela n'a pas l'air beaucoup plus joli non plus. Cependant, vous vous débarrassez des appels répétés push_back(). Bien sûr, si vos valeurs ne sont "pas dans un tableau", vous devrez d'abord les y placer, mais vous pourrez le faire de manière statique (ou au moins des références/pointeurs), selon le contexte.

1voto

bill Points 1

Que diriez-vous d'initialiser à l'aide d'un objet statique. Dans son constructeur il pourrait appeler une fonction statique dans l'objet pour effectuer l'initialisation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X