我有一个接受大std::vectors
(通过const &
)并返回大向量(按值)的函数。在我的代码的一部分中,我需要执行以下操作:
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
或(对于每种情况)来重用代码是微不足道的。这样做的缺点是我(不必要地)需要存储一长串大s。一方面,我确信它不会使用比我更多的内存;但即便如此,不必要地存储大量数据似乎是一种不好的做法。all_values
// do something with res
// do something different with res
std::vector
选项 1(根据请求使用迭代器生成结果):
一种选择是创建一些 iterator_map 函数,其行为类似于 map,但根据需要生成结果。我认为这对于 Python 的yield
.
选项 2(使用面向对象的设计):
另一种选择是使用ABC
继承并覆盖函数g
:在一个派生类中g
执行// do something with res
,而在另一个派生类中执行// do something different with res
。
选项 3+ (???):
我真的很想听听您关于如何在 C++ 中处理此类问题的建议。提前致谢。