gpt4 book ai didi

c++ - vector pop_back

转载 作者:行者123 更新时间:2023-11-27 23:51:01 31 4
gpt4 key购买 nike

我有以下函数来计算两个笛卡尔点之间的距离,以及其中一个点关于 z 轴的镜像。

inline std::vector< Real64 >
distances(
MyCartesian const & point_i,
MyCartesian const & point_j
)
{
std::vector< Real64 > sumVals;

// Calculate the distance between points
sumVals.push_back( pow_2( point_i.x - point_j.x ) );
sumVals.push_back( pow_2( point_i.y - point_j.y ) );
sumVals.push_back( pow_2( point_i.z - point_j.z ) );

Real64 sumTot = 0;
std::vector< Real64 > retVals;
std::for_each( sumVals.begin(), sumVals.end(), [&] ( Real64 n ) { sumTot += n; } );
retVals.push_back( std::sqrt( sumTot ) );

// Calculate distance to mirror point
sumVals.pop_back();
sumVals.push_back( pow_2( point_i.z - ( -point_j.z ) ) );
sumTot = 0;
std::for_each( sumVals.begin(), sumVals.end(), [&] ( Real64 n ) { sumTot += n; } );
retVals.push_back( std::sqrt( sumTot ) );

return retVals;
};

pop_backpush_back 有什么好处,还是有更好的方法来替换 vector 中的最后一个元素?

最佳答案

在我看来,使用 vector 会使它过于复杂。

写一个你可以使用的距离函数。
像这样:

Real64 distance(MyCartesian const & i, MyCartesian const & j)
{
return std::sqrt(pow_2(i.x - j.x)
+ pow_2(i.y - j.y)
+ pow_2(i.z - j.z));
}

MyCartesian mirror(MyCartesian pt)
{
pt.z *= -1;
return pt;
}

std::vector<Real64>
distances(MyCartesian const & i,
MyCartesian const & j)
{
return std::vector { distance(i, j), distance(i, mirror(j)) };
}

由于总是恰好有两个结果,您可能更愿意返回一个而不是一个 vector

关于c++ - vector pop_back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456828/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com