编辑:添加了更多细节。
我正在尝试编写一个算法来查找 n 个数组的交集(所有点的共同点)。我的程序采用这些数组并将它们存储在一个二维数组中,在该数组上进行操作。例如,这是一个示例 main 方法:
int a[] = { 12, 54, 42 };
int b[] = { 54, 3, 42, 7 };
int c[] = { 3, 42, 54, 57, 3 };
IntersectionTableau<int> x(3); // Where 3 is the max number of arrays allowed
// to be stored.
x.addArray(a, 3);
x.addArray(b, 4);
x.addArray(c, 9);
x.run(); // Finds the intersection.
这些添加的数组将存储T** arrays
在int* sizes
. T 是泛型类型。什么是一种有效的算法,可以让我对可变数量的泛型类型数组执行此操作?
这是我目前正在尝试做的事情:
template <class T>
inline
void IntersectionTableau<T>::run() {
T* commonElements = d_arrays[0];
for (int i = 1; i < d_currentNumberOfArrays; ++i) {
commonElements = getIntersection(commonElements, d_arrays[i], d_sizes[i - 1], d_sizes[i]);
}
d_results = commonElements;
}
template <class T>
inline
T* IntersectionTableau<T>::getIntersection(T* first, T* second, int sizeOfFirst, int sizeOfSecond) {
T* commonElements;
if (sizeOfFirst > sizeOfSecond) {
commonElements = new T[sizeOfFirst];
} else {
commonElements = new T[sizeOfSecond];
}
for (int i = 0; i < sizeOfFirst; ++i) {
for (int j = 0; j < sizeOfSecond; ++j) {
if (first[i] == second[i]) {
commonElements[i] = first[i];
}
}
}
return commonElements;
}
第一个函数获取前两个数组并将它们发送到第二个函数,第二个函数返回这两个数组之间的交集数组。然后,第一个函数将交集数组与下一个数组进行比较d_arrays
,依此类推。我的问题是当我从d_results
垃圾值中打印出一个元素时,我不确定为什么。有人可以告诉我我做错了什么,或者是一个更好的方法来完成这个吗?