conversion double* to vector<double> and vice versa

Discussion in 'C++' started by J.M., Mar 8, 2007.

  1. J.M.

    J.M. Guest

    I am trying to use a software package in my program, the problem being
    different methods are used to store vectors. I have "my" vectors stored as
    vector<double> from the STL and need to pass a double* and the dimension of
    the vector to the software package. On return, I get a double* plus
    dimension, but need vector<double>. Is there anyway that this can be
    achieved *without* copying the data, as this is a very expensive option?

    Thanks in advance for any help.

    Jan
    J.M., Mar 8, 2007
    #1
    1. Advertising

  2. J.M.

    Jim Langston Guest

    "J.M." <> wrote in message
    news:esoj3j$v9i$-karlsruhe.de...
    >I am trying to use a software package in my program, the problem being
    > different methods are used to store vectors. I have "my" vectors stored as
    > vector<double> from the STL and need to pass a double* and the dimension
    > of
    > the vector to the software package. On return, I get a double* plus
    > dimension, but need vector<double>. Is there anyway that this can be
    > achieved *without* copying the data, as this is a very expensive option?
    >
    > Thanks in advance for any help.
    >
    > Jan


    Going into the functions, yes. Vectors are guaranteed to store their data
    contiguously and so can be used where arrays are expected. That is, you can
    pass &MyVector[0] and MyVector.size(). &MyVector.front() is also used
    sometimes.

    Coming out of the functions, I don't see how. You are given a pointer to an
    array of doubles. The only way to get this into a vector, as far as I know,
    is to copy the data. There may be some constructor for vector that takes a
    pointer to data and a length, I just don't know (but tend to doubt it?).
    Jim Langston, Mar 8, 2007
    #2
    1. Advertising

  3. J.M.

    J.M. Guest

    Jim Langston schrieb:

    > "J.M." <> wrote in message
    > news:esoj3j$v9i$-karlsruhe.de...
    >>I am trying to use a software package in my program, the problem being
    >> different methods are used to store vectors. I have "my" vectors stored
    >> as vector<double> from the STL and need to pass a double* and the
    >> dimension of
    >> the vector to the software package. On return, I get a double* plus
    >> dimension, but need vector<double>. Is there anyway that this can be
    >> achieved *without* copying the data, as this is a very expensive option?
    >>
    >> Thanks in advance for any help.
    >>
    >> Jan

    >
    > Going into the functions, yes. Vectors are guaranteed to store their data
    > contiguously and so can be used where arrays are expected. That is, you
    > can
    > pass &MyVector[0] and MyVector.size(). &MyVector.front() is also used
    > sometimes.
    >
    > Coming out of the functions, I don't see how. You are given a pointer to
    > an
    > array of doubles. The only way to get this into a vector, as far as I
    > know,
    > is to copy the data. There may be some constructor for vector that takes
    > a pointer to data and a length, I just don't know (but tend to doubt it?).


    Thanks, but that is precisely what I needed :). Actually, the software
    package takes as argument double* and returns the result in the same array
    by overwriting, so in this case, I do not actually need to convert back to
    vector<double>... I just hope I am not doing something dangerous... Thanks.

    Jan
    J.M., Mar 8, 2007
    #3
  4. J.M.

    Jim Langston Guest

    "J.M." <> wrote in message
    news:esomh2$2ig$-karlsruhe.de...
    > Jim Langston schrieb:
    >
    >> "J.M." <> wrote in message
    >> news:esoj3j$v9i$-karlsruhe.de...
    >>>I am trying to use a software package in my program, the problem being
    >>> different methods are used to store vectors. I have "my" vectors stored
    >>> as vector<double> from the STL and need to pass a double* and the
    >>> dimension of
    >>> the vector to the software package. On return, I get a double* plus
    >>> dimension, but need vector<double>. Is there anyway that this can be
    >>> achieved *without* copying the data, as this is a very expensive option?
    >>>
    >>> Thanks in advance for any help.
    >>>
    >>> Jan

    >>
    >> Going into the functions, yes. Vectors are guaranteed to store their
    >> data
    >> contiguously and so can be used where arrays are expected. That is, you
    >> can
    >> pass &MyVector[0] and MyVector.size(). &MyVector.front() is also used
    >> sometimes.
    >>
    >> Coming out of the functions, I don't see how. You are given a pointer to
    >> an
    >> array of doubles. The only way to get this into a vector, as far as I
    >> know,
    >> is to copy the data. There may be some constructor for vector that takes
    >> a pointer to data and a length, I just don't know (but tend to doubt
    >> it?).

    >
    > Thanks, but that is precisely what I needed :). Actually, the software
    > package takes as argument double* and returns the result in the same array
    > by overwriting, so in this case, I do not actually need to convert back to
    > vector<double>... I just hope I am not doing something dangerous...
    > Thanks.
    >
    > Jan


    Nothing dangerous, just make sure that the software package doesn't try to
    resize the array itself. And make sure it's sized proper when you go in.
    But as you say it accepts a size parameter so I suspect it respects the
    limits.
    Jim Langston, Mar 8, 2007
    #4
  5. Jim Langston wrote:
    > "J.M." <> wrote in message
    > news:esoj3j$v9i$-karlsruhe.de...
    >> I am trying to use a software package in my program, the problem being
    >> different methods are used to store vectors. I have "my" vectors stored as
    >> vector<double> from the STL and need to pass a double* and the dimension
    >> of
    >> the vector to the software package. On return, I get a double* plus
    >> dimension, but need vector<double>. Is there anyway that this can be
    >> achieved *without* copying the data, as this is a very expensive option?
    >>
    >> Thanks in advance for any help.
    >>
    >> Jan

    >
    > Going into the functions, yes. Vectors are guaranteed to store their data
    > contiguously and so can be used where arrays are expected. That is, you can
    > pass &MyVector[0] and MyVector.size(). &MyVector.front() is also used
    > sometimes.
    >
    > Coming out of the functions, I don't see how. You are given a pointer to an
    > array of doubles. The only way to get this into a vector, as far as I know,
    > is to copy the data. There may be some constructor for vector that takes a
    > pointer to data and a length, I just don't know (but tend to doubt it?).


    As a side note, on return from the function, would it be OK to
    resize the vector appropriately, and then writing to &vec[0]
    (passing this pointer to the function). The memory in the vector
    is guaranteed to be continuous and if you resize it in advance,
    then would this work? I think so.

    - J.
    Jacek Dziedzic, Mar 8, 2007
    #5
  6. J.M.

    J.M. Guest

    Jim Langston schrieb:

    > "J.M." <> wrote in message
    > news:esomh2$2ig$-karlsruhe.de...
    >> Jim Langston schrieb:
    >>
    >>> "J.M." <> wrote in message
    >>> news:esoj3j$v9i$-karlsruhe.de...
    >>>>I am trying to use a software package in my program, the problem being
    >>>> different methods are used to store vectors. I have "my" vectors stored
    >>>> as vector<double> from the STL and need to pass a double* and the
    >>>> dimension of
    >>>> the vector to the software package. On return, I get a double* plus
    >>>> dimension, but need vector<double>. Is there anyway that this can be
    >>>> achieved *without* copying the data, as this is a very expensive
    >>>> option?
    >>>>
    >>>> Thanks in advance for any help.
    >>>>
    >>>> Jan
    >>>
    >>> Going into the functions, yes. Vectors are guaranteed to store their
    >>> data
    >>> contiguously and so can be used where arrays are expected. That is, you
    >>> can
    >>> pass &MyVector[0] and MyVector.size(). &MyVector.front() is also used
    >>> sometimes.
    >>>
    >>> Coming out of the functions, I don't see how. You are given a pointer
    >>> to an
    >>> array of doubles. The only way to get this into a vector, as far as I
    >>> know,
    >>> is to copy the data. There may be some constructor for vector that
    >>> takes a pointer to data and a length, I just don't know (but tend to
    >>> doubt it?).

    >>
    >> Thanks, but that is precisely what I needed :). Actually, the software
    >> package takes as argument double* and returns the result in the same
    >> array by overwriting, so in this case, I do not actually need to convert
    >> back to vector<double>... I just hope I am not doing something
    >> dangerous... Thanks.
    >>
    >> Jan

    >
    > Nothing dangerous, just make sure that the software package doesn't try to
    > resize the array itself.


    Yup, I figured that this would be a bad idea... But I know for a fact that
    that it does not (or can be told not to do so). It seems to work fine now,
    although not much testing has been done. Thanks for your help.

    Jan

    > And make sure it's sized proper when you go in.
    > But as you say it accepts a size parameter so I suspect it respects the
    > limits.
    J.M., Mar 8, 2007
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jimmy
    Replies:
    1
    Views:
    3,149
    Eliyahu Goldin
    Jun 14, 2005
  2. carmen
    Replies:
    4
    Views:
    30,686
    ersecchio
    Jan 12, 2010
  3. rz0
    Replies:
    4
    Views:
    429
  4. Replies:
    3
    Views:
    8,751
  5. Peter Otten
    Replies:
    1
    Views:
    151
    Andreas Perstinger
    Jun 18, 2013
Loading...

Share This Page