簡體   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