正如我们知道的输出参数是非常糟糕的事情如何在回溯时避免输出参数?
void foo(set<int> *x)
x是实际需要的参数,这是Linux系统调用很常见的做法。 但是对于C++来说,这似乎不是一个好的编程习惯。
我有一个场景,我必须通过字符串列表回溯,并从每个列表中返回所有可能的字符串组合。
a b
d e
f g
Possible combinations are:
a d f, a d g, a e f, a e g, etc...
list<list<string> > parameters;
的直接回溯的解决办法是:
void getCombinations(list<list<string> > ¶m,
list<list<string> >::iterator it,
vector<string> &backtracker,
list<vector<string> > &output){
if(it == param.end()){
output.append(backtracker);
}
for(auto i = it->begin; i!= it->end(); i++){
backtracker.push_back(*i);
getCombinations(param, it+1, backtracker, output)
backtracker.pop_back();
}
}
现在,我怎样才能避免在这里输出参数,这样,我可以返回输出列表?
*我们知道输出参数是非常糟糕的事情*我们?你能否进一步解释你的意思?你把什么称为*输出参数*,为什么它不好? –
有过这方面的讨论,你可以参考http://stackoverflow.com/questions/18157090/how-to-avoid-the-copy-when-i-return/了解更多关于它! – innosam
因此,通过输出参数表示传递可修改的引用或指针,对吗?无论如何,在许多情况下,有些理由更愿意按价值回报,但这并不意味着输出参数会被抹黑。你仍然可以使用它们,如果在你的设计中它是有意义的,而且你已经有了它的实现,那就使用它。有些地方的输出参数是由编码准则规定的(例如,针对C++ 03编译器的商店) –