我有一个主要功能如下:
#include <iostream>
#include <vector>
#include <Eigen/Dense>
using Eigen::Vector3d;
using namespace std;
void ext_func(vector<Vector3d> &a,vector<Vector3d> &b,vector<Vector3d> &c);
int main()
{
vector<Vector3d> a = {};
a.push_back(Vector3d(1.,1.,0.));
a.push_back(Vector3d(2.,0.));
vector<Vector3d> b = {};
b.push_back(Vector3d(.5,.7,2.));
b.push_back(Vector3d(0.,.2,-1.2));
vector<Vector3d> c = {};
c.push_back(Vector3d::Zero());
c.push_back(Vector3d::Zero());
ext_func(a,b,c);
}
在main
中,我调用了一个外部函数:
void ext_func(vector<Vector3d> &a,vector<Vector3d> &c)
{
double fac = 0.01;
for (size_t i = 0; i < a.size(); i++) {
auto a_temp = a[i] + fac * b[i] / 50.;
cout << "Before" << endl << fac*a_temp << endl;
a[i] = a_temp;
c[i] += fac*a_temp;
cout << "After" << endl << fac*a_temp << endl << endl;
}
}
输出为:
Before
0.010001
0.0100014
4e-06
After
0.010002
0.0100028
8e-06
Before
0.02
0.0100004
-2.4e-06
After
0.02
0.0100008
-4.8e-06
这不是我想要的(我希望a_temp分配后保持不变)。我知道问题在于我为&a
分配了一个新值,所以当我调用a_temp
时,我基本上是在第二次增加我的初始a[i]
。通过将auto
替换为Vector3d
或Vector3d&&
可以解决此问题。
我不确定auto
在这里到底在做什么。