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;