Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initialisation of static vector

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

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

It's an example code :)

The values in push_back() are declared independly; not in array or something.

Edit: if it isn't possible, tell me that also :)

like image 492
Xirdus Avatar asked Sep 13 '10 15:09

Xirdus


People also ask

How do you initialize a static variable?

For the static variables, we have to initialize them after defining the class. To initialize we have to use the class name then scope resolution operator (::), then the variable name. Now we can assign some value. The following code will illustrate the of static member initializing technique.

What is meant by static initialization of objects?

You initialize a static object with a constant expression, or an expression that reduces to the address of a previously declared extern or static object, possibly modified by a constant expression.


2 Answers

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

std::vector<int> 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 <boost/assign/list_of.hpp>  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}; 
like image 101
Mike Seymour Avatar answered Sep 22 '22 07:09

Mike Seymour


With 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};
like image 26
syvex Avatar answered Sep 20 '22 07:09

syvex