你好我正在做作业,我完全被难倒了。我们假设让列表的每个顺序都是一个整数数组,所以我根据老师的伪代码编写了这段代码:
void permute(int v[], int curr,char letters[])
{
if(curr >= sizeof(v)/sizeof(int))
{
checkit(v,letters);
}
for(int i = curr; i < sizeof(v)/sizeof(int); i++)
{
swap(i,curr,v);
permute(v,curr + 1,letters);
swap(v[curr],v[i]);
}//for
}//permu
我唯一不确定的是sizeof(v)/sizeof(int)
是否是正确的方法。
答案 0 :(得分:9)
sizeof(v)/sizeof(int)
不是要走的路。您的函数完全等同于:
void permute(int *v, int curr, char *letters)
{
...
}
即。 v
实际上不是一个数组,它是一个指针。您无法在C或C ++中传递数组。
解决方案是以下之一(并非详尽无遗):
std::vector
),您可以在size()
答案 1 :(得分:5)
我的一个小问题:你可以让C ++为你推断数组大小
template <size_t N>
void permute(int (&v)[N], int curr,char letters[])
{
if(curr >= N)
{
checkit(v,letters);
}
for(int i = curr; i < N; i++)
{
swap(i,curr,v);
permute(v,curr + 1,letters);
swap(v[curr],v[i]);
}//for
}//permu
答案 2 :(得分:0)
除了Oli的回答:C ++中的典型方法是将指针传递给开头,并指向要置换的序列末尾的指针。按照惯例,开始指针是包含的,结束指针是独占的。
void permute(int *v, int *begin, int *end, char *letters) {
if (begin == end) {
checkit(v, end, letters);
} else {
...
permute(v, begin + 1, end, letters);
...
}
}