如何在 C++ 中正确地静态转换向量?

Jav*_*i V 5 c++ stdvector stdarray

我有一个代码,其中在函数的末尾我需要从 int 转换为数组的所有元素的两倍,以便能够在退出函数之前执行最终 push_back。我现在拥有的代码是:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我对这些行感到不舒服:

for (int i = 0; i < dims; ++i) 
    myArrayDouble[i] = static_cast<double>(myArrayInt[i]);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

谢谢你。

BЈо*_*вић 5

您可以使用算法中的函数。

使用copy_n

std::copy_n( myArrayInt.begin(), dims, myArrayDouble.begin() );
Run Code Online (Sandbox Code Playgroud)

或带有副本

std::copy( myArrayInt.begin(), myArrayInt.end(), myArrayDouble.begin() );
Run Code Online (Sandbox Code Playgroud)