C++:在递归函数中创建新对象
C++: Create new objects in recursive function
我有一个递归函数,我想把新创建的对象推到一个向量中(在整个递归过程中,向量是通过引用传递的)。
但在递归完成后,我需要对象仍然存在,并且不会被删除,因为它们是局部变量。我该如何做到这一点?
这是我的代码(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;
}
}
我觉得你的想法是对的。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;
}
相关文章:
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 重用对象与创建新对象
- C++,创建新对象时类的对象更改
- 运算符重载 += 添加新对象
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 从使用概念定义的函数返回新对象
- 从 Rcpp 函数返回指向"新"对象的指针的正确方法
- 如何删除派生类中基类对象的新对象
- 有没有一种方法可以从函数中返回一个新对象或对现有对象的引用
- 为模板参数类型中的新对象分配内存
- 删除通过取消引用新对象初始化的对象
- C++ 实例化新对象时不接受继承方法默认参数值
- 有没有办法删除传递给函数"foo(新对象())"的对象?
- 将 Eigen::MatrixXd 转换为 arma::mat 并在新对象上制作副本
- 创建新对象并立即为其设置属性时出现编译器错误
- 如何异步销毁对象并立即分配一个新对象
- 删除传递给 C++ 中成员函数的新对象
- 具有构造函数的新对象数组,需要在C++中设置参数
- 我可以制作一个对象方法,如果单独调用,它将自行修改,但如果在复制初始化期间调用,则会返回一个新对象?