c++ - 使用等式形式在构造函数中添加多个相同大小的向量
问题描述
是否可以在类的构造函数中添加/减去两个以上,最好是三个向量/矩阵系数?
理想情况下,我想实现这样的东西,它在开源 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;
}
解决方案
有可能的。
你应该告诉编译器如何加/减/除向量/矩阵。所以你应该重载相应的运算符。
除非您想使用 '+,-,/,*' 运算符,否则您可能会通过函数调用实现相同的行为。
您可以在运算符重载页面的帮助下实现所需的运算 符。
推荐阅读
- vba - 在工作表 1 的数据下粘贴具有工作表 2 中特定单词的数据
- java - 如何将 spring DataSource tomcat 迁移到 hikari 属性?
- node.js - chai-http - res.json 从单元测试调用时不是一个函数
- javascript - 从大数组中删除重复的字符串
- elasticsearch - 将 DSL 查询转换为 NEST.net
- c - C memcpy 字节缓冲区到打包结构,好决定吗?
- javascript - 我的用户登录错误验证消息曾经显示在 chrome 上,但现在不显示了
- reactjs - 如何在 ReactXP 中检测屏幕尺寸变化/设备旋转?
- c# - 打开街道地图 - Itinero C# - 道路限制
- windows - Windows 10 上的 Jenkins - 如何将默认 shell 设置为 Ubuntu.exe