在C ++中实现PDE积分器的周期性边界条件

时间:2015-03-25 16:48:43

标签: c++ arrays stl pde

我需要在C ++中实现偏微分方程的有限差分积分器。在Python中,我使用numpy.roll方法来滚动数组,从而获得周期性边界条件。

C中有一个库会给我这个方法吗?也就是说,当我访问长度为n+1的向量的位置n时,它会指向向量位置0的单元格吗?

1 个答案:

答案 0 :(得分:2)

您可以使用mod运算符调整索引。

#include <vector>

using namespace std;

int roll(vector<int>& v, unsigned int n) {
   return v[n % v.size()];
}

int main() {
   vector<int> v;
   for (int i=0; i<10; ++i) {
      v.push_back(i);
   }

   return roll(v, 2);
}

要滚动整个矢量,请使用此功能:

vector<int> rollVector(const vector<int>& v, unsigned int n) {   
   auto b = v.begin() + (n % v.size());
   vector<int> ret(b, v.end());
   ret.insert(ret.end(), v.begin(), b);
   return ret;
}