2015-03-25 3 views
0

Мне нужно реализовать на C++ интеграл с разностными разностями дифференциального уравнения в частных производных. В Python я использовал метод numpy.roll для свертывания массива и, таким образом, получения периодических граничных условий.Реализация периодических граничных условий интегратора PDE в C++

Есть ли библиотека в C, которая даст мне этот метод? То есть, когда я получаю доступ к позиции n+1 вектора длины n, он будет указывать на ячейку в местоположении 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; 
} 
+0

Так ролл, (V, 2), предполагает, чтобы дать мне весь вектор свернутого по 2 индексам? – Ohm

+0

Нет, новый вектор не создан. Просто индекс, где i> = n, отображается на правильное значение. Пример выше 'roll (v, 11)' будет возвращать v [1]. –

Смежные вопросы