我有一個代碼,在函數的結尾,我需要從int中強制轉換數組,以便在退出該函數之前能夠執行最後的push_back操作,以便將數組的所有元素加倍。我現在所擁有的代碼是:如何在C++中正確地靜態轉換一個向量?
template <class T, size_t dims> class A {
typedef typename std::array<int, dims> ArrayInt;
typedef typename std::array<double, dims> ArrayDouble;
typedef typename std::vector <ArrayDouble> VectorDouble;
/* ...*/
foo() {
/* ...*/
ArrayInt myArrayInt;
ArrayDouble myArrayDouble;
VectorDouble myVectorDouble;
/* Initialize myArrayInt
Do some other stuff */
for (int i = 0; i < dims; ++i)
myArrayDouble[i] = static_cast<double>(myArrayInt[i]);
myVectorDouble.push_back(myArrayDouble);
}
}
它可以正常工作,但我覺得不舒服對線:
for (int i = 0; i < dims; ++i)
myArrayDouble[i] = static_cast<double>(myArrayInt[i]);
是否有這樣做的沒有更好的辦法?
謝謝。
從您的標題,我認爲它是'static_cast <>'這讓你不舒服。 [這裏](http://stackoverflow.com/questions/103512/in-c-why-use-static-castintx-instead-of-intx)對'static_cast <>'很好的解釋。在你的情況下,轉換是由語言支持的有效轉換。沒有其他辦法可以告訴C++將double的向量(或數組)轉換爲int的向量(或數組),而不是通過循環和按值轉換值。這可以。 – ierceg
這些線條的哪一部分你確實感到不舒服?循環,演員,都?對於循環:看看std :: transform。對於演員:這一個不應該傷害,但像boost :: numeric_cast是一個不錯的選擇,因爲它需要舍入/超出範圍/ ... – stijn
你的'for'循環可能被簡化爲'std :: copy(myArrayInt.begin(),myArrayInt.end(),myArrayDouble.begin());',否則它看起來很好。 – Johnsyweb