我的问题与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进行转换。我想知道这个问题是否有很好的解决方案。谢谢!
答案 0 :(得分:3)
您可以使用std::copy,因为它会执行顺序分配。
答案 1 :(得分:2)
您既不能使用模板参数T
(std::vector<int>
)将带有模板参数L
(std::vector<float>
)的容器分配或转换为另一个容器。毕竟他们是不同的班级。
但是,由于他们使用迭代器,您可以使用 std::copy
填充FloatVector
:
FloatVector solution2(myvector.size());
std::copy(myvector.begin(),myvector.end(),solution2.begin());
击> <击> 撞击>
如果您当前的功能签名是f(FloatVector)
,我建议您将其更改为
template< class T >
ReturnType f(std::vector<T> myVector, ....);
答案 2 :(得分:2)
该语言直接支持从一种数字类型转换为另一种数字类型。你甚至不需要static_cast
,你可以分配。这种转换涉及对值的逻辑复制,而不是对值表示的重新解释。
该语言不直接支持不同类型的数组之间的转换,也不支持不同类型的std::vector
的转换。
但正如您所发现的那样,对复制元素有一些支持,然后当每个元素都是数字时,内置的数字类型转换支持会为每个元素启动。