C++ 将2d向量传递给函数

C++ 将2d向量传递给函数,c++,vector,types,C++,Vector,Types,我有一个二维整数向量: std::vector<std::vector<int> > matrix; std::向量矩阵; 我想对这个对象调用一个函数。 功能是: int coverTransactions(int k, const std::vector<std::vector<int> > matrix ) { //k nombre de clusters int compteur = 0; for(int t = 0; t

我有一个二维整数向量:

std::vector<std::vector<int> > matrix;
std::向量矩阵;
我想对这个对象调用一个函数。 功能是:

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
}
intcovertransactions(intk,conststd::vector matrix){//k nombre de clusters
内部计算机=0;
for(int t=0;t!=11;t++){
计算机=0;
for(int i=0;i!=k;i++){
if(矩阵[t][i]==1)
计算机++;
}
如果(compteur!=1)
return-1;//在retourne-1上执行事务n'appartient pasáun et un seul cluster
}
return 0;//正在进行过程更正,在retourne 0上安装了一个辅助设备和一个辅助群集
}
不要注意法语的注释,它只是解释返回值如何与我想要解决的问题相联系,但它并不影响对代码的理解

出于某种原因,以这种方式调用函数时:

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

std::cout您试图将一个指针传递给
矩阵
,而不是引用。卸下

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

std::cout这里发生的事情是一个
按引用传递
,它不同于
按指针传递
,在这里,您将变量的地址传递到函数中(调用它时),函数的定义接受指针。这里,您基本上是将一个指向向量的指针作为参数传递,从而执行一个
通过指针传递的操作

coverTransactions(3, &matrix)
,而根据函数的定义,此处发生了一个
按引用传递
,因此,只需按函数中的原样传递向量即可:

coverTransactions(3, matrix)
上述两种方法之间的区别在于,
指针
可以是
NULL
,但是
引用
从来都不是
NULL
,因此我们确信引用的是有效的变量。这就是为什么只要有可能就使用
引用
,只有在必要时才使用
指针

int-coverTransactions(int k,const std::vector&matrix){//k nombre de clusters
    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
}
内部计算机=0; for(int t=0;t!=11;t++){ 计算机=0; for(int i=0;i!=k;i++){ if(矩阵[t][i]==1) 计算机++; } 如果(compteur!=1) return-1;//在retourne-1上执行事务n'appartient pasáun et un seul cluster } return 0;//正在进行过程更正,在retourne 0上安装了一个辅助设备和一个辅助群集 }
因此,在调用函数时:

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

std::不能尝试从
&矩阵中删除
&
。参数是通过引用而不是指针传递的。谢谢你的评论,但不幸的是,我得到了同样的错误…@GuillaumeLeseur:不,你没有。我刚试过,这就解决了问题。如果没有,那么您没有向我们展示真正的代码。我知道我要说的是,您的编辑仍将具有相同的工作修复(从调用中删除
&
)。因此,您的代码中还有比您发布的代码更多的内容。在将来,你应该考虑提示来获得更多有用的答案。“复制参考”不是我如何解释通过引用。特别是,引用与复制完全无关。实现可以复制引擎盖下的地址,但这与C++语言的观点无关。更新我的答案@ ChestHakl,请取消投票。我没有投反对票。如果非要我猜的话,是OP本人对你和我都投了反对票(见评论)。好吧,也许他不明白真正的bug是什么。无论如何,我讨厌这么挑剔,但在我们生活的C++11时代,我也不会再谈论
NULL
,而是总是使用
NULL ptr
。至于“交易”选票,我想避免这样做,谢谢!)
std::cout << coverTransactions(3, matrix) << std::endl;