C++中求数组长度的方法详解

 更新时间:2023年12月28日 11:28:01   作者:luffy5459  
C++中没有直接提供求数组长度的方法,提供了sizeof(),begin(),end()等方法,可以供求数组长度使用,文中通过代码示例给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下

C++中没有直接提供求数组长度的方法,提供了sizeof(),begin(),end()等方法,可以供求数组长度使用。

可以通过两种方式来求数组长度,这里使用模版类。一个是使用sizeof()做除法,另一种办法是通过end(),begin()做减法。代码如下。

#include <iostream>
#include <string>
using namespace std;
template <class T>
int getArrSize(T& arr){
	return sizeof(arr) / sizeof(arr[0]);
}

template <class T>
int getArrLength(T& arr){
    return end(arr) - begin(arr);
}
int main(){
    string arr[] = {"a","b","c","e","f"};
    int arr2[] = {1,3,4,5};
    //string arr
    cout<<"sizeof(arr): "<<sizeof(arr)<<endl;
    cout<<"sizeof(arr[0]): "<<sizeof(arr[0])<<endl;
    cout<<"end(arr): "<<end(arr)<<endl;
    cout<<"begin(arr): "<<begin(arr)<<endl;
    cout<<"size of arr: "<<getArrSize(arr)<<endl;
    cout<<"length of arr:"<<getArrLength(arr)<<endl;

    //int arr
    cout<<"===================="<<endl;
    cout<<"sizeof(arr): "<<sizeof(arr2)<<endl;
    cout<<"sizeof(arr[0]): "<<sizeof(arr2[0])<<endl;
    cout<<"end(arr): "<<end(arr2)<<endl;
    cout<<"begin(arr): "<<begin(arr2)<<endl;
    cout<<"size of arr: "<<getArrSize(arr2)<<endl;
    cout<<"length of arr:"<<getArrLength(arr2)<<endl;
	return 0;
}

运行结果如下:

sizeof(arr): 120
sizeof(arr[0]): 24
end(arr): 0x7fff5a35b5d8
begin(arr): 0x7fff5a35b560
size of arr: 5
length of arr:5
====================
sizeof(arr): 16
sizeof(arr[0]): 4
end(arr): 0x7fff5a35b560
begin(arr): 0x7fff5a35b550
size of arr: 4
length of arr:4

对于第一种求数组长度的办法,可能不是很明白,为什么需要sizeof()之后,需要除以sizeof(arr[0])。这里有几点需要注意:

1、sizeof不是函数,是操作符,它是编译时求一个类型所占的字节数。

2、sizeof(arr):以长度4的int数组为例,其实求出了int类型数组所占总长度4*4=16。然后需要按照任意一个类型长度其实就是4来做除法。

到此这篇关于C++中求数组长度的方法详解的文章就介绍到这了,更多相关C++中求数组长度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++静态成员变量和静态成员函数的使用方法总结

    C++静态成员变量和静态成员函数的使用方法总结

    下面小编就为大家带来一篇C++静态成员变量和静态成员函数的使用方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C语言数据结构之动态分配实现串

    C语言数据结构之动态分配实现串

    这篇文章主要介绍了C语言数据结构之动态分配实现串的相关资料,希望通过本文能帮助到大家,让大家实现数据结构中动态分配实现串的实例,需要的朋友可以参考下
    2017-10-10
  • C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结

    C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cas

    这篇文章主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下
    2014-10-10
  • 如何调用C标准库的exit函数详解

    如何调用C标准库的exit函数详解

    这篇文章主要给大家介绍了关于如何调用C标准库的exit函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • C++中Boost.Chrono时间库的使用方法

    C++中Boost.Chrono时间库的使用方法

    chrono是一个time library, 源于boost,现在已经是C++11标准了,下面这篇文章主要给大家介绍了关于C++中Boost.Chrono时间库的使用方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • C++大小字母的转换方式

    C++大小字母的转换方式

    这篇文章主要介绍了C++大小字母的转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Linux下实现C++操作Mysql数据库

    Linux下实现C++操作Mysql数据库

    由于工作需要抽出一周的时间来研究C/C++访问各种数据库的方法,并打算封装一套数据库操作类,现在奉上最简单的一部分:在Linux下访问MySQL数据库。
    2017-05-05
  • 深入理解C/C++中的写时拷贝

    深入理解C/C++中的写时拷贝

    这篇文章主要给大家介绍了C/C++中写时拷贝的相关资料,所谓写时拷贝也就是拖延版的深拷贝,下面文章中介绍的非常清楚,需要的朋友可以参考学习,下面来一起看看吧。
    2017-03-03
  • C++数据结构之并查集详解

    C++数据结构之并查集详解

    这篇文章主要介绍了C++数据结构之并查集详解,并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题,并查集的思想是用一个数组表示了整片森林,需要的朋友可以参考下
    2023-08-08
  • C++基于reactor的服务器百万并发实现与讲解

    C++基于reactor的服务器百万并发实现与讲解

    这篇文章主要介绍了C++基于reactor的服务器百万并发实现与讲解,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论