gpt4 book ai didi

C++使用迭代器将函数映射到可迭代对象上

转载 作者:行者123 更新时间:2023-11-28 08:06:40 25 4
gpt4 key购买 nike

我有一个函数接受大型 std::vectors(由 const & 传递)并返回大型 vector (按值)。在我的代码的一部分中,我需要做:

std::list<std::vector<double> > all_vectors;
// all_vectors is filled with values somewhere in here
for (const std::vector & v : all_values)
{
std::vector<double> res = f(v);
// do something with res
}

在我的代码的另一部分,我需要做的是:

std::list<std::vector<double> > all_vectors;
// all_vectors is filled with values somewhere in here
for (const std::vector & v : all_values)
{
std::vector<double> res = f(v);
// do something different with res
}

最简单的选项(内存消耗):通过简单地将 f 映射到 all_values 然后遍历结果并执行 //do something with res//对 res 做一些不同的事情(针对每种情况)。这样做的缺点是我(不必要地)需要存储一长串大型 std::vector。一方面,我非常确定它不会使用比我更多的内存;但即便如此,不必要地存储大量数据似乎是一种不好的做法。

选项 1(使用迭代器根据请求生成结果):一种选择是创建一些 iterator_map 函数,其行为类似于 map,但会根据需要生成结果。我认为这对于 Python 的 yield 来说是非常可行的。

选项 2(使用面向对象的设计):另一种选择是使用 ABC 继承并覆盖函数 g:在一个派生类中,g 将执行 //做某事使用 res,而在另一个中,它将执行 //do something different with res.

选项 3+ (???):

我真的很想听听您关于如何在 C++ 中处理此类问题的建议。提前致谢。

最佳答案

为什么需要按值返回 vector ?如果您可以通过引用返回并使用 vector<double>::const_iterator ,您可以放心,您不会修改原始 vector 。

如果您确实需要一份拷贝,那么在这两种情况下您很可能需要一份不同的拷贝,因此您的选项 0 将不起作用。

如果您要从列表中的 vector 编译值的混搭集合,迭代器选项对我来说听起来是最好的——每次您调用 operator++ ,可以动态计算下一个元素。

关于C++使用迭代器将函数映射到可迭代对象上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167855/

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