我需要在C ++中实现偏微分方程的有限差分积分器。在Python中,我使用numpy.roll
方法来滚动数组,从而获得周期性边界条件。
C中有一个库会给我这个方法吗?也就是说,当我访问长度为n+1
的向量的位置n
时,它会指向向量位置0
的单元格吗?
答案 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;
}