我是C程序員,想要在C++中變得更好。我想實現一個置換函數(不使用STL算法)。我提出了以下算法(出於我的C思維方式),但是打印並計算排列次數(不使用stl next_permutation)
a) it crashes for k > 2 (I suppose because the element that the iterator
points to, gets deleted, is inserted back and then incremented).
b) erase/insert operation seem unnecessary.
您當中的C++專家將如何實現它?
template <class T>
class Ordering {
public:
Ordering(int n);
int combination(int k);
int permutation(int k);
private:
set<T> elements;
vector<T> order;
}
template <class T>
int Ordering<T>::permutation (int k) {
if (k > elements.size()) {
return 0;
}
if (k == 0) {
printOrder();
return 1;
}
int count = 0;
for (typename set<T>::iterator it = elements.begin();
it != elements.end();
it++
)
{
order[k-1] = *it;
elements.erase(*it);
count += permutation(k-1);
elements.insert(*it);
}
return count;
}
如果它崩潰,那麼你應該調試它。 – 2012-04-03 22:07:59
如果它沒有崩潰,那不會是C的想法,會不會。 – 2012-04-03 22:14:50
@KerrekSB:具有諷刺意味的是,由於標準圖書館內部深處的細節造成的破壞。有趣,是不是:) – bitmask 2012-04-03 22:38:22