【发布时间】:2014-04-19 07:18:00
【问题描述】:
我有一个递归函数,我想将新创建的对象推送到一个向量中(该向量在整个递归过程中通过引用传递)。
但是在递归完成后,我需要对象仍然存在并且不会被删除,因为它们是局部变量。我如何做到这一点?
这是我的代码(base_pair 是一个简单的结构,只包含 2 个整数),目前缺少退出条件,我稍后会实现它:
void Nussinov::traceback (int row, int col, std::vector< base_pair_type>& base_pairs, int dp_matrix[][_sequence.size()]){
if(dp_matrix[row+1][col-1] == dp_matrix[row][col]){
base_pair_type base_pair = {row,col};
base_pairs.push_back(base_pair);
traceback(row+1, col-1, base_pairs, dp_matrix);
return;
}
}
【问题讨论】:
-
你是在堆栈上创建对象吗?
-
当所有递归都完成后,如果你仍然可以访问向量,那么你应该能够访问它的所有元素。请提供一个代码示例来展示你真正在做什么。
-
我同意@arunmoezhi。
std::vector::push_back复制或移动您传递给它的参数。由于它不存储引用(即堆栈变量),因此在递归完成时仍应填充向量。 -
对象
base_pair的副本将在base_pairsbase_pairs.back()中,究竟是什么工作不正常? -
最后一件事,是
declype(_sequence)::size()constexpr?因为否则你会过得很糟糕。