1. 程式人生 > >C++中獲取靜態陣列和動態陣列的長度

C++中獲取靜態陣列和動態陣列的長度

1.對於字串陣列,可以用strlen( )函式來獲取字串陣列的長度。

   如:

                char a1[] = "fwegwe";
                cout << strlen(a1) << endl;

                

2.對於一般的陣列,如:int a[ ] = { 40,45,438,12,46,899,450,321,210,785 ,10,57};

   可以用sizeof(a)/sizeof(a[0])來獲取陣列的長度。

   原理:sizeof()函式可以返回陣列所佔的記憶體,而sizeof(a[0])返回的是陣列第一個元素所佔的記憶體。

                所以式子:sizeof(a)/sizeof(a[0])得到的就是陣列的個元素個數,也就是陣列的長度。

     在C++中,如果要多次獲取不同陣列的長度,為了避免重複寫程式碼,可以定義一個求陣列長度的模板。

                template <class T>
                int getlength(T& array)
                {
                  return (sizeof(array) / sizeof(array[0]));
                }

                以後再使用時用getlength( )函式即可得到陣列的長度。

                int a[] = { 40,45,438,12,46,899,450,321,210,785 ,10,57};
                cout << "陣列的長度為:"<<getlength(a)<< endl;

                

3.對於一個一維動態陣列,可以使用.size()函式來獲取陣列的個數。

    還是用上面的陣列 a[ ]加入一個判斷,將大於50的值存入動態陣列b。然後獲取b的大小。

    下面是完整程式碼:

#include "iostream""
#include "vector"
using namespace std;

template <class T>          //定義獲取陣列大小的模板


int getlength(T& array)
{
return (sizeof(array) / sizeof(array[0]));
}
int main()
{
int a[] = { 40,45,438,12,46,899,450,321,210,785 ,10,57};
vector<int> b  //建立動態陣列b
for (int i = 0; i < getlength(a); i++)
{
if (a[i] > 50)
b.push_back(a[i]);    //向動態陣列中加入元素
}
for (int i = 0; i < b.size(); i++)
{
cout << b[i] << " " << endl;
}
cout <<"陣列中的元素個數為: "<<b.size()<<endl;
    return 0;
}