[英]how to create a mesh of variable dimension in c++?
我想設計一個類,該類的工作是用在編譯時未知的n填充維n的網格。
長話短說,讓我們在第一個維度上舉一個例子。
class grid1D {
public:
grid1D(double min, double max, double step)
: min_(min), max_(max), step_(step) {};
std::vector<double> populate() const
{
std::vector<double> vec;
for (double i = min_; i < max_; i + step_)
vec.push_back(i);
vec.push_back(max_);
return vec;
}
private:
double min_;
double max_;
double step_;
}
在(固定)n個維度上概括此類的一種直接方法是將n嵌套在循環中。 但是,如果n成為參數,則此策略不再起作用。
我可以想象創建一個大的一維數組並嘗試“手工”填充它可能是一個(繁瑣的)選擇。
我還檢查了boost :: multi_array類,但是理想情況下,我需要在運行時定義n。
有什么建議嗎?
JM
一種方法是使用一個簡單的公式將N維網格映射到一維數組:元素G(x 1 ,x 2 ,...,x N )存儲在數組中的索引x 1處 * N N-1 + x 2 * N N-2 + ... + x N-1 * N + x N ,0 <= x i <= N-1(基本上,編譯器在定義a時使用相同的公式多維數組)。
您可以使用Horner的方法輕松地將坐標轉換為索引以計算多項式,或者使用div和mod操作將坐標轉換為坐標。 因此,遍歷整個網格只是遍歷一維數組的所有索引,並在需要時將它們解碼為網格坐標。
另一種方法是遞歸地實現populate()
:N個嵌套循環可以由遞歸函數中的單個循環表示,該循環到達深度N。但是我認為效率較低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.