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)
有没有更好的方法来做到这一点?
谢谢你。
您可以使用算法中的函数。
使用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)