Initialisation of static vector

前端 未结 6 460
遥遥无期
遥遥无期 2020-12-13 23:48

I wonder if there is the \"nicer\" way of initialising a static vector than below?

class Foo
{
    static std::vector MyVector;
    Foo()
    {
           


        
6条回答
  •  盖世英雄少女心
    2020-12-14 00:22

    In C++03, the easiest way was to use a factory function:

    std::vector MakeVector()
    {
        std::vector v;
        v.push_back(4);
        v.push_back(17);
        v.push_back(20);
        return v;
    }
    
    std::vector Foo::MyVector = MakeVector(); // can be const if you like
    

    "Return value optimisation" should mean that the array is filled in place, and not copied, if that is a concern. Alternatively, you could initialise from an array:

    int a[] = {4,17,20};
    std::vector Foo::MyVector(a, a + (sizeof a / sizeof a[0]));
    

    If you don't mind using a non-standard library, you can use Boost.Assignment:

    #include 
    
    std::vector Foo::MyVector = boost::list_of(4,17,20);
    

    In C++11 or later, you can use brace-initialisation:

    std::vector Foo::MyVector = {4,17,20};
    

提交回复
热议问题