gpt4 book ai didi

c++ - 2D std::vector 替换值 - 需要删除以避免内存泄漏?

转载 作者:太空狗 更新时间:2023-10-29 20:50:19 26 4
gpt4 key购买 nike

我有一个二维 vector ,我想要所有 int替换的值。

虽然这段代码似乎有效,但我想知道:

  • 我是否需要在重新分配之前删除旧 vector (第 5 行),因为有一个 std::vector<int> 的拷贝存储在 line ?

  • 这是替换值的最佳方式(使用迭代器)吗?

代码:

for (std::vector< std::vector<int> >::iterator it = data.begin(); it != data.end(); ++it)
{
std::vector<int> line = *it;
std::fill(line.begin(), line.end(), 0);
*it = line; // line 5
}

我想避免内存泄漏。

最佳答案

您不需要删除代码中的任何内容,因为您没有使用new 创建内容。

如果你也想在一行中完成所有这些,你可以使用 std::for_eachstd::fill:

#include <algorithm>
#include <vector>
std::vector<std::vector<int>> a;

// set every element in two dimensional vector to 5
std::for_each(a.begin(), a.end(), [](std::vector<int> &x){std::fill(x.begin(), x.end(), 5);});

与您的评论相关的附录:是的,您的原始 vector 存储在堆栈中。由于您没有传递自定义分配器, vector 将使用 std::allocator分配它的元素(在你的例子中是 int 的 vector )。 std::allocator 在动态内存(即堆)中分配这些元素,但您无需担心释放或删除此内存,因为它由 vector 的内部处理。这意味着如果调用 vector 的析构函数(例如,因为它超出范围),内存最晚会被删除,或者如果您更改 vector 的大小,内存可能会更早被删除。

关于c++ - 2D std::vector 替换值 - 需要删除以避免内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55219205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com