how do u convert a vector<float> A to a vector<double> B

?

=?iso-8859-1?Q?Ali_=C7ehreli?=

and why doesnt the standard vector have such conversion available?

You can use the vector constructor that takes two iterators:

#include <vector>
#include <assert.h>

using namespace std;

int main()
{
vector<float> a;
a.push_back(1.2f);

vector<double> b(a.begin(), a.end());

assert(!b.empty());
cout << b.front() << '\n';
}

Ali
 
M

Mike Wahler

Re: how do u convert a vector<float> A to a vector<double> B

std::vector<float> A;
/* etc */
std::vector<double> B(A.begin(), A.end())

and why doesnt the standard vector have such conversion available?

It does. See above.

-Mike
 
B

bluekite2000

What if b is already constructed?
Another question
Say you have
vector<float> a(3);
//init a
vector<std::complex<float> > c(3);
//init c
Now I want something like
real(c)=a;

Currently I have
for(int i=0;i<c.size();i++)
c.real()=a;

Which I dont really like.
 
?

=?iso-8859-1?Q?Ali_=C7ehreli?=

What if b is already constructed?

Then it's assignment:

b = vector said:
Another question
Say you have
vector<float> a(3);
//init a
vector<std::complex<float> > c(3);
//init c
Now I want something like
real(c)=a;

Currently I have
for(int i=0;i<c.size();i++)
c.real()=a;

Which I dont really like.


There is nothing wrong with it. Just wrap it in a function and you are done:

typedef vector<float> Reals;
typedef vector<complex<float> > Complexes;

void set_reals(Complexes & complexes, Reals const & reals)
{
// some checks
if (complexes.size() != reals.size())
{
throw SomeError;
}

/* the logic here */
}

Very neat :)

More cool (and possibly more obscure) things can probably be done, but I
really don't think that it's worth it.

Ali
 
I

Ivan Vecerina

Ali Çehreli said:
Then it's assignment:

b = vector<double>(a.begin(), a.end());

Actually, a probably better expression (for clarity,
maintainability, and performance) is:

b.assign( a.begin(), a.end() );


hth, Ivan
 
C

Clark S. Cox III

and why doesnt the standard vector have such conversion available?

#include <vector>
#include <algorithm> //for std::copy

....

std::vector<float> A = ...;

//Construct B with the contents of A
std::vector<double> B(A.begin(), A.end());

//Or if B is already constructed:
B.clear();
B.insert(B.begin(), A.begin(), A.end());

//Or:
B.resize(A.size());
std::copy(A.begin(), A.end(), B.begin());
 
C

Clark S. Cox III

Actually, a probably better expression (for clarity,
maintainability, and performance) is:

b.assign( a.begin(), a.end() );

There is no "assign" function on std::vector.
 
M

Marc Mutz

Clark S. Cox III wrote:
There is no "assign" function on std::vector.

23.2.4.1 vectors constructors, copy, and assignment
<snip>
template <class InputIterator>
void assign(InputIterator first, InputIterator last);

Effects:
erase(begin(), end());
insert(begin(), first, last);

template <class Size, class U> void assign(Size n, const U& u = U());

Effects:
erase(begin(), end());
insert(begin(), n, t);
<snip>

Maybe your compiler lacks member template support?

Marc
 
M

Marc Mutz

Clark S. Cox III wrote:
//Or:
B.resize(A.size());
std::copy(A.begin(), A.end(), B.begin());

b.clear();
b.reserve( a.size() );
std::copy( a.begin(), a.end(), std::back_inserter( b ) );

Marc
 
C

Clark S. Cox III

Clark S. Cox III wrote:


23.2.4.1 vectors constructors, copy, and assignment
<snip>
template <class InputIterator>
void assign(InputIterator first, InputIterator last);

Effects:
erase(begin(), end());
insert(begin(), first, last);

template <class Size, class U> void assign(Size n, const U& u = U());

Effects:
erase(begin(), end());
insert(begin(), n, t);
<snip>

Maybe your compiler lacks member template support?

Well, I'll be. I can't believe I missed that.

I think I was looking at the first listing in 23.2.4 without
remembering the "Descriptions are provided here only for operations on
vector that are not described in one of these tables or for operations
where there is additional semantic information." part.
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top