Стандартная библиотека С++ отделяет структуры данных от алгоритмов, таких как 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