【发布时间】:2013-08-22 19:51:46
【问题描述】:
我们知道输出参数真的很糟糕
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();
}
}
现在,我怎样才能在这里避免输出参数,以便我可以返回输出列表?
【问题讨论】:
-
我们知道输出参数真的很糟糕 是吗?你能进一步解释你所说的那句话是什么意思吗?你所说的输出参数,为什么不好?
-
这方面已经有很长的讨论了,你可以参考stackoverflow.com/questions/18157090/…了解更多!!!
-
所以输出参数的意思是通过可修改的引用或指针传递,对吗?无论如何,虽然在许多情况下有一些理由更喜欢按值返回,但这并不意味着输出参数是不可信的。你仍然可以使用它们,如果在你的设计中它是有意义的并且你已经有了它的实现,那就使用它。有些地方输出参数是由编码指南强制(例如,以 C++03 编译器为目标的商店)
-
是的,你是正确的!谢谢
标签: c++ backtracking rvo