[英]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.