2

我的问题与 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 进行转换。我想知道这个问题是否有好的解决方案。谢谢!

4

3 回答 3

3

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

于 2012-08-02T08:43:31.670 回答
2

您既不能将带有模板参数 ( ) 的容器分配或强制转换为带有模板参数( )T的容器。毕竟他们是不同的阶级。std::vector<int>Lstd::vector<float>

但是,由于它们使用迭代器,因此您可以使用以下内容FloatVector填充std::copy

FloatVector solution2(myvector.size());

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

编辑解决您的评论

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

template< class T >
ReturnType f(std::vector<T> myVector, ....);
于 2012-08-02T08:45:21.340 回答
2

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

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

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

于 2012-08-02T08:55:09.887 回答