程序/C++利用函数模板编写一个程序求出数组的长度。
#include <iostream>using namespace std;
template <class T>
T sum(T *a,int length) {
T sum = 0;
for (int i = 0; i < length; i++) {
sum += a;
}
return sum;
}
int GetArrayLength(const T(&))
{
return N;
}
void main() {
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
int length = GetArrayLength(a);
int sum_int = sum(a,length);
printf("总长度为:%d\nsum= %d\n",length , sum_int);
system("PAUSE");
}
#include <iostream>
using namespace std;
template<class T>
void display(T& a,int n){
cout<<"该数组为:"<<endl;
for(int i=0;i<n;i++)
cout<<a<<"\t";
cout<<endl;
}
template <class T>
T sum(T a[], size_t n)
{
T sum = 0;
for (size_t i = 0; i < n; i++)
{
sum += a;
}
return sum;
}
void main()
{
int a[] = {1,2,3,4,5,6,7,8,9};
display(a,9);
cout<<"该数组元素之和为:"<<sum(a, 9)<<endl;
}
上面是我编写的一个求数组元素和的一个程序,可以有大佬在其中利用函数模板编写一个求数组长度的程序吗?
我之前编写的用VC 6.0运行不出来,不知道应该怎么办?希望得到大佬们的帮助。 VC6太老了,有些东西不支持,换个编译器把 本帖最后由 superbe 于 2019-11-6 11:28 编辑
template <class T>
int GetArrayLength(T &array)
{
return sizeof(array)/sizeof(array);
}
main里调用不变:
int length = GetArrayLength(a); superbe 发表于 2019-11-5 20:45
template
int GetArrayLength(T &array)
{
数组引用不是你这样的
T arr = {0};
T (&ren) = arr;//这才是数组引用 #include <iostream>
template <typename T, size_t N>
/*适用一维数组*/
size_t GetArrayLength(const T (&arr))
{
return N;
}
template <typename T, size_t N>
/*二维数组*/
size_t GetArrayLength(const T *(&arr))
{
return N;
}
int main(int argc, char const *argv[])
{
int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::cout << "arr[] --- " << GetArrayLength(arr) << std::endl;
char ch[] = "hello";
std::cout << "ch[] --- " << GetArrayLength(ch) << std::endl;
double arr1[] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
std::cout << "arr1[][] --- " << GetArrayLength(arr1) << std::endl;
char ch1[] = {"hello", "fishC", "Clang", "&C++"};
std::cout << "ch1[][] --- " << GetArrayLength(ch1) << std::endl;
return 0;
}
-------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.418]
(c) 2019 Microsoft Corporation。保留所有权利。
E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-sbztw5o1.xqm --stdout=Microsoft-MIEngine-Out-jisfivrp.1vv --stderr=Microsoft-MIEngine-Error-m1ykmf1z.1ho --pid=Microsoft-MIEngine-Pid-uxwp34jl.bmh --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
arr[] --- 11
ch[] --- 6
arr1[][] --- 3
ch1[][] --- 4
E:\Users\admin\Documents\VScode>
bin554385863 发表于 2019-11-6 04:41
数组引用不是你这样的
T arr = {0};
T (&ren) = arr;//这才是数组引用
测试结果是正确的 。 bin554385863 发表于 2019-11-5 15:45
VC6太老了,有些东西不支持,换个编译器把
确实是这个问题,老师建议我们初学者用VC6.0,但是是真的很不方便。谢谢你呀 bin554385863 发表于 2019-11-6 07:08
#include
template
/*适用一维数组*/
我理解了这个代码了,已经可以运行出来了,谢谢你 superbe 发表于 2019-11-5 20:45
template
int GetArrayLength(T &array)
{
谢谢你呀!代码可以运行
页:
[1]