簡體   English   中英

將2D向量傳遞給函數

[英]Passing a 2d vector to a function

我有一個整數的二維向量:

std::vector<std::vector<int> > matrix;

我想在此對象上調用一個函數。 函數是:

int coverTransactions(int k, const std::vector<std::vector<int> > matrix ) { //k nombre de clusters
    int compteur = 0;
    for(int t = 0; t != 11; t++) {
        compteur = 0;
        for(int i = 0; i != k; i++) {
            if(matrix[t][i] == 1)
                compteur++;
        }
        if(compteur != 1)
            return -1; //on retourne -1 si la transaction n'appartient pas à un et un seul cluster
    }
    return 0;//si tout se passe correctement, cad t appartient à un et un seul cluster on retourne 0
}

不要關注法語注釋,這只是為了解釋返回值如何與我要解決的問題聯系在一起,但這不會影響對代碼的理解。

由於某種原因,以這種方式調用函數時:

std::cout << coverTransactions(3, &matrix) << std::endl;

我收到以下錯誤:

 coderror: cannot convert ‘std::vector<std::vector<int> >*’ to ‘int (*)[3]’ for argument ‘2’ to ‘int coverTransactions(int, int (*)[3])’

我不明白為什么,因為它們是同一類型...

這里發生的事情是pass by reference ,這與pass by pointer不同,在pass by reference pass by pointer ,您將變量的地址傳遞給函數(調用時),並且函數的定義接受指針。 在這里,您基本上是將指向向量的指針作為參數pass by pointer並因此pass by pointer

coverTransactions(3, &matrix)

,而根據您函數的定義,此處發生了pass by reference ,因此,只需按原樣傳遞函數中的向量即可:

coverTransactions(3, matrix)

上面兩種方法的區別在於, pointer可以為NULL ,但references絕不能為NULL ,因此,我們可以確保引用的是有效變量。 這就是為什么最好在可能的情況下使用references ,而僅在必要時使用pointers

您嘗試將指針傳遞給matrix而不是引用。 刪除&

std::cout << coverTransactions(3, matrix) << std::endl;
    int coverTransactions(int k, const std::vector<std::vector<int> > &matrix ) { //k nombre de clusters
    int compteur = 0;
    for(int t = 0; t != 11; t++) {
        compteur = 0;
        for(int i = 0; i != k; i++) {
            if(matrix[t][i] == 1)
                compteur++;
        }
        if(compteur != 1)
            return -1; //on retourne -1 si la transaction n'appartient pas à un et un seul cluster
    }
    return 0;//si tout se passe correctement, cad t appartient à un et un seul cluster on retourne 0
}

因此,在調用函數時:

std::cout << coverTransactions(3, matrix) << std::endl;

現在,一切順利!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM