[英]How does C++ know how many bytes to copy when retuning an object from a function?
[英]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.