gpt4 book ai didi

c++ - 设计需要暂存空间的算法

转载 作者:IT老高 更新时间:2023-10-28 22:22:03 26 4
gpt4 key购买 nike

C++ 标准库将数据结构与算法分开,例如 std::sort:

template< class RandomAccessIterator >
void sort( RandomAccessIterator first, RandomAccessIterator last );

当算法需要中间暂存空间时,我想保持算法和数据结构的分离。

考虑到这个目标,我想实现一种图像算法,该算法需要输入和输出图像之间的中间暂存空间。可以在函数调用中分配必要的暂存空间,但是由于这些调用的大小和频率相同,图像大小相同,这会严重降低性能。这使得将数据结构与算法分离变得更加困难。

实现此目的的一种可能方法如下:

// Algorithm function
template<typename InputImageView, typename OutputImageView, typename ScratchView>
void algorithm(
InputImageView inputImageView,
OutputImageView outputImageView,
ScratchView scratchView
);

// Algorithm class with scratch space
template<typename DataStructure>
class Algorithm {
public:
template<typename InputImageView,typename OutputImageView>
void operator()(
InputImageView inputImageView,
OutputImageView outputImageView
){
m_scratch.resize(inputImageView.size());
algorithm(inputImageView,outputImageView,makeView(m_scratch));
}

private:
DataStructure m_scratch;
}

以上是有效的算法+暂存空间设计,还是有更好的方法?

旁注:我使用的是 boost::gil图书馆

最佳答案

我认为在这种情况下,我会让算法允许您传递(引用或指向)暂存空间的结构,并为该参数提供默认值。这样,当/如果分配结构的额外时间不是问题时,用户可以在不传递结构的情况下调用函数,但如果(例如)构建可以从重复重用相同空间中受益的处理管道,则可以传递一个.

关于c++ - 设计需要暂存空间的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14885361/

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