함수 끝에서 함수를 종료하기 전에 마지막 push_back을 수행 할 수 있도록 배열의 모든 요소를 두 배로 변환하기 위해 int에서 캐스팅해야하는 코드가 있습니다. 내가 지금 가지고있는 코드는 다음과 같습니다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 <>'로 불편을 겪고 있다고 생각합니다. [Here] (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'-loop는'std :: copy (myArrayInt.begin(), myArrayInt.end(), myArrayDouble.begin());', 그렇지 않으면 괜찮아 보입니다. – Johnsyweb