如何在C ++中转换不同的数字向量类型

时间:2012-08-02 08:39:08

标签: c++ stl

我的问题与C ++中的数字类型转换有关。一种非常常见的方法是使用static_cast,例如:

float a;
int b;
a = 3.14;
b = static_cast<int>(a);

那么,数字矢量类型转换怎么样?我们可以继续使用static_cast吗?我做了以下实验:

typedef vector<int> IntVector;
typedef vector<float> FloatVector;
IntVector myvector;
myvector.push_back(3);
myvector.push_back(4);
myvector.push_back(5);

// Solution 1 (successful)
FloatVector solution1 ( myvector.begin(), myvector.end() );
for(int i=0; i<solution1.size(); i++)
   cout<<solution1[i]<<endl;
// Solution 2 (failed)
FloatVector solution2;
solution2 = static_cast<FloatVector> (myvector);

似乎对于数字向量类型,不可能使用static_cast进行转换。我想知道这个问题是否有很好的解决方案。谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用std::copy,因为它会执行顺序分配。

答案 1 :(得分:2)

您既不能使用模板参数Tstd::vector<int>)将带有模板参数Lstd::vector<float>)的容器分配或转换为另一个容器。毕竟他们是不同的班级。

但是,由于他们使用迭代器,您可以使用std::copy填充FloatVector

FloatVector solution2(myvector.size());

std::copy(myvector.begin(),myvector.end(),solution2.begin());

<击>

修改address your comment

如果您当前的功能签名是f(FloatVector),我建议您将其更改为

template< class T >
ReturnType f(std::vector<T> myVector, ....);

答案 2 :(得分:2)

该语言直接支持从一种数字类型转换为另一种数字类型。你甚至不需要static_cast,你可以分配。这种转换涉及对值的逻辑复制,而不是对值表示的重新解释。

该语言不直接支持不同类型的数组之间的转换,也不支持不同类型的std::vector的转换。

但正如您所发现的那样,对复制元素有一些支持,然后当每个元素都是数字时,内置的数字类型转换支持会为每个元素启动。