gpt4 book ai didi

c++ - 在 C++ 中查找子数组的模板函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:29 25 4
gpt4 key购买 nike

#include <iostream>
#include <string>

using namespace std;

template <class T> int IsSubArr(T& a, int a_len, T& b, int b_len)
{
int i,j;
bool found;
int k;
T& s=a,l=b;

int s_len = (a_len < b_len) ? a_len : b_len; // find the small array length
if (s_len == a_len) // check to set pointers to small and long array
{
s = a;
l = b;
}
else
{
s = b;
l = a;
}


for (i = 0; i <= a_len-s_len; i++) //loop on long array
{
found = true;
k=i;
for (j=0; j<s_len; j++) // loop on sub array
{
if (s[j] != l[i])
{
found = false;
break;
}
k++;
}
}

if (found)
return i;
else
return -1;
}


/******* main program to test templates ****/
int main()
{

int array[5] = {9,4,6,2,1};
int alen = 5;
int sub_arr[3] = {6,2,1};
int slen = 3;

int index= 0;
index = IsSubArr(array,alen,sub_arr,slen);
cout << "\n\n Place of sub array in long array: " << index;

cout << endl;

return 0;

}

对于这行代码:

index = IsSubArr(array,alen,sub_arr,slen);

我得到错误:

Error   1   error C2782: 'int IsSubArr(T &,int,T &,int)' : template parameter 'T' is ambiguous  

请帮忙解决这个问题?

最佳答案

由于 array[a]array[b] 其中 a != b 是 2 种不同的类型,因此您需要 2 种类型模板参数。
解决方法是使用指针。

+ template <class T> int IsSubArr(T* a, int a_len, T* b, int b_len)
+ T* s = a; T*l = b;

关于c++ - 在 C++ 中查找子数组的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34484338/

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