c++ stl复制功能正确的内存管理

发布于 2024-11-25 21:08:46 字数 320 浏览 1 评论 0原文

就在下面的代码中,我是否需要使用 new 为 floatArray 分配内存,还是复制函数会为我分配内存?

另外,可以通过这种方式将常量向量复制到数组吗?为什么?

vector<float> floatVector;
//filled floatVector here

float *floatArray = new float[floatVector.size()];
copy(floatVector.begin(),floatVector.end(),floatArray);          
delete[] floatArray;

Just on the following code do I need to allocate memory with new for floatArray or will the copy function allocate memory for me?

Also is it okay to copy a constant vector to an array this way? Why?

vector<float> floatVector;
//filled floatVector here

float *floatArray = new float[floatVector.size()];
copy(floatVector.begin(),floatVector.end(),floatArray);          
delete[] floatArray;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

莫多说 2024-12-02 21:08:46

std::copy 不分配内存,您应该自己分配内存。

std::copy doesn't allocate memory, you should do it yourself.

静赏你的温柔 2024-12-02 21:08:46

如果您不想先分配数组,那么您可以使用 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));

If you don't want to allocate the array first then you may use a back_inserter iterator to push elements one by one into certain containers. For some containers this is less efficient (I think) but can be very handy sometimes.

#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));
许久 2024-12-02 21:08:46

copy 不会为您分配,所以是的,您需要分配它。

copy will not allocate for you, so yes you need to allocate it.

寂寞美少年 2024-12-02 21:08:46

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);

std::copy copies by using the arguments assignment ("=") operator or the arguments copy constructor (this is probably implementation dependent, I'm not sure right now). It does nothing but iterate through the range beginning at param.begin() to param.end() and do something like:

while (first!=last) *result++ = *first++;

Thus, you need to allocate the memory necessary yourself. Otherwise it will create undefined behaviour.

Is it OK to copy a constant vector to an array this way? Depends on what you want to do. Generally, it's fine, since the values are transferred to the target by value, not by reference, hence const-correctness is not broken.

For example, this works fine:

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);
最美的太阳 2024-12-02 21:08:46

复制函数从不分配内存,但您必须为静态数据结构分配内存,但对于动态数据结构,它会自动分配内存。

这个过程不好,但最好使用另一个向量而不是 floatarray

copy function never allocate memory but you have to allocate memory for static datastructures but for dynamic datastructures, it'll allocate memory automatically.

and this process is not good but its better to use another vector instead of that floatarray

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文