【发布时间】:2014-03-15 04:12:42
【问题描述】:
好久没接触c++了,刚刚在通过引用传递二维向量时遇到了一个很奇怪的问题,在main函数中有描述:
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > result;
//I intentionally omit the codes for permutation,
//only pushing the original one to the result
result.push_back(num);
return result;
}
//print the permutation, I want to pass by referrence
void printPerm(vector<vector<int> > &result) {
for(int i=0; i<result.size(); i++) {
for(int j=0; j<result[i].size(); j++) {
cout << result[i][j]<<" ";
}
}
}
};
int main() {
vector<int> old;
old.push_back(1);
old.push_back(2);
old.push_back(3);
Solution sol;
//this gives me error for no matching function
//call, candidate argument doesn't match
sol.printPerm((sol.permute(old)));
//but the one below works!
vector<vector<int> > result = sol.permute(old);
sol.printPerm(result);
}
【问题讨论】:
-
如果可以使用c++11,可以使用新的en.cppreference.com/w/cpp/language/range-for
-
请注意,这与向量(或任何特定类型)无关;它只与返回值和引用有关。请参阅codepad.org/4PNCcGs5 了解具有完全相同问题的更简单的程序。
-
@delnan 是的,我不知道是什么原因造成的,所以我决定发布整个内容...