首页 > 解决方案 > 使用等式形式在构造函数中添加多个相同大小的向量

问题描述

是否可以在类的构造函数中添加/减去两个以上,最好是三个向量/矩阵系数?

理想情况下,我想实现这样的东西,它在开源 openfoam 流体动力学求解器的主文件中调用:

            tmp<fvVectorMatrix> tUEqn
            (
                fvm::ddt(U) +  fvm::div(phi, U)
              + turbulence->divDevReff(U) 
               == 
               fvOptions(U)
            );

我的猜测是构造函数完成了多个运算符重载,因为这个等式在主文件中进行了描述。在这里,由 fvm::ddt(U)、fvm::div(phi,U) 和 turbulence->divDevReff(U) 产生的矩阵系数一起添加到 fvVectorMatrix 的系数中,fvVectorMatrix 是 fvMatrix 类的模板类型。我怎样才能实现这样的目标?

编辑:

所以经过 3 天的尝试后,我终于解决了这个问题:这是我的示例代码:

#include <iostream>
#include <vector>
#include <cmath>

using std::vector;
using std::cin;
using std::cout;
using std::endl;


using namespace std;

class Fields
{
    public:
        Fields():value(1.0){
        };
        double value;
        typedef vector<Fields> vecFields;

};

 Fields::vecFields operator+(const Fields::vecFields& lhs, const Fields::vecFields& rhs)
 {
     Fields::vecFields result(lhs);
        for(unsigned int i=0; i < lhs.size(); i++)
        {
            result[i].value += rhs[i].value;
        }
        return result;
 }

int main()
{

    vector<Fields> fvec1(4);
    vector<Fields> fvec2(4);
    vector<Fields> fvec3(4);

       fvec3= fvec1+fvec2+fvec3;

     for(unsigned int i=0; i<fvec1.size();i++)
     {
         cout << fvec3[i].value << endl;
     }
    return 0;


}

标签: c++

解决方案


有可能的。

你应该告诉编译器如何加/减/除向量/矩阵。所以你应该重载相应的运算符。

除非您想使用 '+,-,/,*' 运算符,否则您可能会通过函数调用实现相同的行为。

您可以在运算符重载页面的帮助下实现所需的运算 符。


推荐阅读