gpt4 book ai didi

c++ - 使用 vector 的递归排列

转载 作者:行者123 更新时间:2023-11-28 02:25:13 25 4
gpt4 key购买 nike

我有这个函数,它假设返回 vector 内所有可能的整数排列。该代码基于现有的字符串排列代码,我试图对其进行改造以处理 vector ,但显然,它们的工作方式与我想象的不同。如果您能提供任何帮助,我将不胜感激;

vector<vector<int>> permute(vector<int> &v1, vector<int> &v2){
vector<vector<int>> v;
if( v1.empty() )
{
v.push_back(v2);
return v;
}
for(auto it = v1.begin(); it != v1.end(); it++){
vector<int> temp1 = v1;
temp1.erase(it); //there's a runtime error on this line
vector<int> temp2 = v2;
temp2.push_back(*it);

permute(temp1, temp2);
}

return v;
}

这是置换字符串的原始代码。

void string_permutation( std::string& orig, std::string& perm )
{
if( orig.empty() )
{
std::cout<<perm<<std::endl;
return;
}

for(int i=0;i<orig.size();++i)
{
std::string orig2 = orig;

orig2.erase(i,1);

std::string perm2 = perm;

perm2 += orig.at(i);

string_permutation(orig2,perm2);
}
}

最佳答案

给你:

   template < typename T>
void vec_permute( std::vector<T> &orig, std::vector<T> &perm)
{
if(orig.empty())
{
for( auto &x : perm)
std::cout<<x;
std::cout<<"\n";
return;
}
for(typename std::vector<T>::size_type i=0;i <orig.size();++i)
{
std::vector<T> orig2(orig);
orig2.erase(std::find(orig2.begin(),orig2.end(),orig.at(i)));
std::vector<T> perm2(perm);
perm2.push_back(orig.at(i));
vec_permute(orig2,perm2);
}
}

演示:http://coliru.stacked-crooked.com/a/01ded4b778aa4165

关于c++ - 使用 vector 的递归排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com