目录
一、代码
二、详细解释
1. print 函数模板
2. array_size 函数模板
3. print1 函数模板
4. print2 函数模板
5. my_begin 和 my_end 函数模板
6. print3 函数模板
7. main 函数
总结
如下代码给出了5种方式打印任意类型任意长度的数组。这段代码定义了多个模板函数,用于处理数组的相关操作,包括计算数组大小、打印数组元素等。在 main
函数中,创建了一个整数数组 a
和一个字符串数组 vs
,并使用不同的方式计算数组大小和打印数组元素。
#include
#include
template
void print(const T* begin,const T* end)
{
while(begin != end)
std::cout<<*begin++<<" ";
std::cout<
void print(const T ta[],size_t size)
{
for(size_t i = 0;i != size; i++)
std::cout<
constexpr unsigned int array_size(const T (&arr)[N])
{
return N;
}
template
void print1(const T (&arr)[N])
{
for(size_t i = 0;i < N;i++)
std::cout<
void print2(const T (&arr)[N])
{
for(const auto &e : arr)
std::cout<
const T* my_begin(const T (&arr)[N])
{
return &arr[0];
}
template
const T* my_end(const T (&arr)[N])
{
return arr + N;
}
template
void print3(const T (&arr)[N])
{
for(auto it = my_begin(arr);it != my_end(arr);it++)
std::cout<<*it<<" ";
std::cout<
输出
1 size of a is:6
2 size of a is:6
3 size of a is:6
4 size of a is:6
1-----------------------
0 2 4 6 8 10
Hello World !
2-----------------------
0 2 4 6 8 10
Hello World !
3-----------------------
0 2 4 6 8 10
Hello World !
4-----------------------
0 2 4 6 8 10
Hello World !
5-----------------------
0 2 4 6 8 10
Hello World !
print1和print2只需要传入数组就可以。推荐使用。
print
函数模板template
void print(const T* begin, const T* end)
{
while(begin != end)
std::cout << *begin++ << " ";
std::cout << std::endl;
}
begin
和 end
,通过遍历从 begin
到 end
的元素,将其输出到标准输出流,并在最后换行。template
void print(const T ta[], size_t size)
{
for(size_t i = 0; i != size; i++)
std::cout << ta[i] << " ";
std::cout << std::endl;
}
ta
和数组的大小 size
,通过循环遍历数组元素并输出,最后换行。array_size
函数模板template
constexpr unsigned int array_size(const T (&arr)[N])
{
return N;
}
arr
,利用模板参数 N
来获取数组的大小,并返回该大小。constexpr
表示该函数可以在编译时求值。print1
函数模板template
void print1(const T (&arr)[N])
{
for(size_t i = 0; i < N; i++)
std::cout << arr[i] << " ";
std::cout << std::endl;
}
arr
,通过循环遍历数组元素并输出,最后换行。print2
函数模板template
void print2(const T (&arr)[N])
{
for(const auto &e : arr)
std::cout << e << " ";
std::cout << std::endl;
}
for
循环遍历数组 arr
中的每个元素 e
,并将其输出到标准输出流,最后换行。my_begin
和 my_end
函数模板template
const T* my_begin(const T (&arr)[N])
{
return &arr[0];
}
template
const T* my_end(const T (&arr)[N])
{
return arr + N;
}
my_begin
函数返回数组 arr
的第一个元素的地址。my_end
函数返回数组 arr
最后一个元素之后的地址。print3
函数模板template
void print3(const T (&arr)[N])
{
for(auto it = my_begin(arr); it != my_end(arr); it++)
std::cout << *it << " ";
std::cout << std::endl;
}
my_begin
和 my_end
函数来获取数组的起始和结束指针,通过指针遍历数组元素并输出,最后换行。main
函数int main(int argc, char* argv[])
{
int a[6] = {0, 2, 4, 6, 8, 10};
std::string vs[3] = {"Hello", "World", "!"};
std::cout << "1 size of a is:" << array_size(a) << std::endl;
std::cout << "2 size of a is:" << sizeof(a) / sizeof(int) << std::endl;
std::cout << "3 size of a is:" << std::end(a) - std::begin(a) << std::endl;
std::cout << "4 size of a is:" << my_end(a) - my_begin(a) << std::endl;
std::cout << "1-----------------------" << std::endl;
print(std::begin(a), std::end(a));
print(std::begin(vs), std::end(vs));
std::cout << "2-----------------------" << std::endl;
print(a, std::end(a) - std::begin(a));
print(vs, std::end(vs) - std::begin(vs));
std::cout << "3-----------------------" << std::endl;
print1(a);
print1(vs);
std::cout << "4-----------------------" << std::endl;
print2(a);
print2(vs);
std::cout << "5-----------------------" << std::endl;
print3(a);
print3(vs);
return 0;
}
main
函数中,创建了一个整数数组 a
和一个字符串数组 vs
。a
的大小并输出。print
函数模板来打印数组 a
和 vs
的元素。这段代码展示了如何使用模板函数来处理数组的大小计算和元素打印,同时演示了不同的遍历数组的方式。通过使用模板函数,可以提高代码的复用性,使其适用于不同类型的数组。