C++:在递归函数中创建新对象
我有一个递归函数,我想把新创建的对象推到一个向量中,这个向量在整个递归过程中通过引用传递 但是在递归完成之后,我需要对象仍然存在,并且不会被删除,因为它们是局部变量。我如何做到这一点 下面是我的代码基对,它是一个简单的结构,只包含2个整数,目前缺少退出条件,稍后我将实现它:C++:在递归函数中创建新对象,c++,recursion,C++,Recursion,我有一个递归函数,我想把新创建的对象推到一个向量中,这个向量在整个递归过程中通过引用传递 但是在递归完成之后,我需要对象仍然存在,并且不会被删除,因为它们是局部变量。我如何做到这一点 下面是我的代码基对,它是一个简单的结构,只包含2个整数,目前缺少退出条件,稍后我将实现它: void Nussinov::traceback (int row, int col, std::vector< base_pair_type>& base_pairs, int dp_matrix[][
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;
}
}
看来你对我的想法是对的。std::vector::push_back将生成局部变量的副本,因此删除局部变量并不重要。而且似乎效果很好:
#include <iostream>
#include <vector>
typedef std::pair<int, int> int_pair;
typedef std::vector< std::vector<int> > int_matrix;
void traceback(int row,
int col,
std::vector<int_pair>& base_pairs,
int_matrix& dp_matrix ){
// bounds checking?
if(dp_matrix[row+1][col-1] == dp_matrix[row][col]){
int_pair base_pair = {row,col};
base_pairs.push_back(base_pair);
traceback(row+1, col-1, base_pairs, dp_matrix);
return;
}
}
int main() {
int_matrix dp_matrix{{4,3,2,1},
{3,2,1,1},
{2,1,2,3},
{0,2,3,4}};
std::vector<int_pair> base_pairs;
traceback(0, 3, base_pairs, dp_matrix);
for (auto& pair : base_pairs)
std::cout << pair.first << "," << pair.second << std::endl;
}
你在堆栈上创建对象吗?当所有递归完成后,如果你仍然可以访问向量,那么你应该能够访问它的所有元素。请提供一个代码示例来说明您真正在做什么。我同意@arunmoezhi。复制或移动传递给它的参数。由于它不存储对堆栈变量的引用,因此在递归完成时仍应填充向量。对象基对的副本将位于基对的基对中。返回,到底是什么工作不正常?最后一件事是declype_sequence::size constexpr?因为否则你会过得很不愉快。