[英]How can I convert different numeric vector type in C++
我的問題與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進行轉換。 我想知道這個問題是否有好的解決方案。 謝謝!
您可以使用std :: copy ,因為它執行順序分配。
您既不能將模板參數為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, ....);
該語言直接支持從一種數字類型到另一種數字類型的轉換。 您甚至不需要static_cast
,只需分配即可。 這種轉換涉及值的邏輯復制,而不是值表示的重新解釋。
該語言不直接支持不同類型的數組之間的轉換,或者不支持不同類型的std::vector
的轉換。
但是,正如您所發現的,對復制元素有一些支持,然后當每個元素為數字時,每個元素都會獲得對數字類型轉換的內置支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.