/*
* call-seq:
* Dvector.new -> a_dvector
* Dvector.new(size=0, value=0) -> a_dvector
* Dvector.new(other) -> a_dvector
* Dvector.new(size) {|index| block } -> a_dvector
*
* Returns a new Dvector. In the first form, the new vector is
* empty. In the second it is created with _size_ copies of _value_
* The third form creates a copy of the _other_ vector
* passed as a parameter (this can also be an Array).
* In the last form, a vector of the given size is created. Each element in this vector is
* calculated by passing the element's index to the given block and
* storing the return value.
*
* Dvector.new -> Dvector[]
* Dvector.new(2) -> Dvector[ 0, 0 ]
* Dvector.new(3, -1) -> Dvector[ -1, -1, -1 ]
* Dvector.new(3) {|i| i**2 + 1} -> Dvector[ 1, 2, 5 ]
*
*/ VALUE dvector_initialize(int argc, VALUE *argv, VALUE ary) {