在下面的代码中我是否需要为floatArray为new分配内存,或者copy函数是否会为我分配内存?
也可以这样将常量向量复制到数组中吗?为什么?
vector<float> floatVector;
//filled floatVector here
float *floatArray = new float[floatVector.size()];
copy(floatVector.begin(),floatVector.end(),floatArray);
delete[] floatArray;
答案 0 :(得分:4)
std::copy
不分配内存,你应该自己动手。
答案 1 :(得分:2)
如果您不想先分配数组,那么可以使用back_inserter
迭代器将元素逐个推送到某些容器中。对于某些容器来说,效率较低(我认为),但有时可能非常方便。
#include<iterator>
#include<vector>
#include<deque>
std::vector<float> floatVector(10,1.0);
std::deque<float> floatDeque; //memory not allocated
//insert elements of vector into deque.
std::copy(floatVector.begin(), floatVector.end(), std::back_inserter(floatDeque));
答案 2 :(得分:0)
副本不会为你分配,所以是的,你需要分配它。
答案 3 :(得分:0)
std :: copy拷贝使用参数赋值(“=”)运算符或参数拷贝构造函数(这可能是依赖于实现的,我现在不确定)。它只会在从param.begin()开始到param.end()的范围内迭代,并执行以下操作:
while (first!=last) *result++ = *first++;
因此,您需要自己分配必要的内存。否则会产生未定义的行为。
这样可以将常量向量复制到数组吗?取决于你想做什么。一般情况下,它很好,因为值是通过值而不是通过引用传递给目标的,因此不会破坏正确性。
例如,这很好用:
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
const std::vector<int> constvec(vec);
int *arrray = new int[2];
std::copy(constvec.begin(),constvec.end(),arrray);
答案 4 :(得分:0)
复制功能永远不会分配内存,但你必须为静态数据结构分配内存,但对于动态数据结构,它会自动分配内存。
并且这个过程并不好,但最好使用另一个向量而不是那个floatarray