![](/img/trans.png)
[英]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.