views:

133

answers:

3

If I create a vector like vector<myClass> v(10); what is the default value of each element?


Also, what if it is a vector<myUnion> v(10) ?

A: 
vector<myClass> v;

its a empty vector with size and capacity as 0.

aJ
what if I have it size 10?
derrdji
size is 0..but as far as I know capacity need not be 0..
Naveen
+12  A: 

The constructor of std::vector<> that you are using when you declare your vector as

vector<myClass> v(10);

actually has more than one parameter. It has three parameters: initial size (that you specified as 10), the initial value for new elements and the allocator value.

explicit vector(size_type n, const T& value = T(),
                const Allocator& = Allocator());

The second and the third parameters have default arguments, which is why you were are able to omit them in your declaration.

The default argument value for the new element is the default-contructed one, which in your case is MyClass(). This value will be copied to all 10 new elements by means of their copy-constructors.

What exactly MyClass() means depends on your class. Only you know that.

AndreyT
+1  A: 

The answer to your second question is similar; vector<myUnion> v(10) will create an array of 10 myUnions initialized with their default constructor. However note that: 1) Unions can't have members with constructors, copy constructors or destructors, as the compiler won't know which member to construct, copy or destroy, and 2) As with classes and structs, members with built-in type such as int will be initialized as per default, which is to say not at all; their values will be undefined.

ceo