C/C++配列長の取得

4417 ワード

問題発生
  • OJ問題を書くときに問題が発生しました.
  • C++文字列長はincludeのstrlen()関数で直接
  • を得ることができる.
  • しかし配列の長さは
  • を直接取得することはできない.
  • 次元配列の長さはネット上で多くの説明がありますが、私はちょうど2次元配列の長さの取得
  • を使用します.

    記録を整理してみましょう
    本題にもどる
    C++では文字列長はstrlen()関数で取得できますが、C++は配列の長さの直接取得をサポートしていないので、配列の大きさで計算します.その長さは主にプログラム実行時に定義された変数にメモリサイズを割り当てることによって固定され、sizeof()で変数サイズを取得します.たとえば,int型配列は配列サイズを単一int変数のサイズで割って配列の長さを得る.C++ではテンプレートtemplateを定義できます.Cではマクロを定義できます.使いやすいです.
    次のC++コードの説明:1次元配列:
    #include 
    
    using namespace std;
    
    template <class T>
    int length(T& arr)
    {
    	return sizeof(arr) / sizeof(arr[0]);//                    
    }
    

    2 D配列も同じです.
    #include 
    using namespace std;
    template <class T>
    int length(T& arr)
    {
    	int m = sizeof(arr) / sizeof(arr[0][0]);
    	int n = sizeof(arr[0]) / sizeof(arr[0][0]);//      
    	return m/n;//      
    }
    

    もちろん、次のように書くこともできます.
    return sizeof(arr) / sizeof(int);//  int       int   
    

    2 Dも同じです.統一変数タイプであればいいです.