繁体   English   中英

从C ++中的函数重新调整多个向量?

[英]Retuning multiple vectors from a function in c++?

我想从一个函数返回多个向量。 我不确定元组是否可以工作。 我试过了,但是没有用。

xxx myfunction (vector<vector<float>> matrix1 , vector<vector<float>> matrix2) {

// some functional code: e.g. 
// vector<vector<float>> matrix3 = matrix1 + matrix2;
// vector<vector<float>> matrix4 = matrix1 - matrix2;

return matrix3, matrix4;

如果这些矩阵很小,则此方法可能不错,但通常我不会这样做。 首先,无论它们的大小如何,都应通过const引用将其传递。

同样, std::vector<std::vector<T>>也不是很好的“矩阵”实现-将数据存储在连续的块中并在整个块上实现按元素操作要好得多。 另外,如果您打算返回矩阵(通过对或其他类),那么您将需要研究移动语义,因为您不需要额外的副本。

如果您不使用C ++ 11,那么我将通过引用传递矩阵并将其填充到函数中。 例如

using Matrix = std::vector<std::vector<float>>; // or preferably something better

void myfunction(const Matrix &m1, const Matrix &m2, Matrix &diff, Matrix &sum)
{
    // sum/diff clear / resize / whatever is appropriate for your use case
    // sum = m1 + m2
    // diff = m1 - m2
}

功能样式代码的主要问题(例如,返回std::tuple<Matrix,Matrix>是避免复制。 可以采取一些巧妙的措施来避免多余的副本,但是IMO有时会采用不太“纯”的编码风格,这只是更简单。

对于矩阵,我通常为其创建具有这些向量的Struct或Class,并将该类的对象发送到函数中。 这也有助于将与Matrix相关的操作封装在该类中。

如果您仍然想使用vector的vector,这是我的看法。 您可以使用带有引用/指针的InOut参数:意思是,如果可以更新参数以保存计算结果,则可以在其中发送参数,在这种情况下不必返回任何内容。

如果参数需要为const并且不能更改,那么我通常将In参数作为const引用发送,并在函数参数列表本身中分离出Out参数。

希望这个对你有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM