1
ここは私のコンビナトリアルコンビネーションの機能です。例えばC++コンビナトリアルコンビネーション高性能機能
:将来的には組み合わせ"ABCD", 2 = AB AC AD BC BD CD.
、私はそれぞれの組み合わせ(だけでなく、printf
)でいくつかの操作を行います。
このコードのパフォーマンスを向上させる方法はありますか?
#include "stdafx.h"
#include "iostream"
#include <vector>
void display(std::vector<char> v, int* indices, int r)//f() to display combinations
{
for (int i = 0; i < r; ++i)
std::cout << v[indices[i]];
std::cout << std::endl;
}
void combinations(std::vector<char> v, int n, int r, void(*f)(std::vector<char>, int*, int))
{
int* indices = new int[r];
for (int i = 0; i < r; ++i)
indices[i] = i;
int count;
bool b;
f(v, indices, r);
while (true)
{
b = true;
for (count = r - 1; count >= 0; --count)
{
if (indices[count] != count + n - r)
{
b = false;
break;
}
}
if (b)
break;
++indices[count];
for (int i = count + 1; i < r; ++i)
indices[i] = indices[i - 1] + 1;
f(v, indices, r);
}
delete[] indices;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<char> v(4);//pool
v[0] = 'A';
v[1] = 'B';
v[2] = 'C';
v[3] = 'D';
int n = 4;// pool size
int r = 2;// length of each combination
combinations(v, n, r, display);// pool, pool size, len of combination, func for each combination
return 0;
}
'のstd :: next_permutation'を使用しないのはなぜ? – Jarod42
パフォーマンスについて話す前に、実装をmemleakとして修正してください。 – Jarod42
あなたは '[index]を削除するのを忘れました ' – stjepano