C++ で 2D 配列のサイズを調べるにはどうすればよいですか? sizeof
配列のサイズを決定するような定義済みの関数はありますか?
getvalue
また、設定されていない値を取得しようとしているときに、配列のメソッドでエラーを検出する方法を教えてもらえますか?
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
int arr[6][5] = {
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5}
};
int rows = sizeof(arr)/sizeof(arr[0]);
int cols = sizeof(arr[0])/sizeof(arr[0][0]);
cout<<rows<<" "<<cols<<endl;
return 0;
}
出力: 6 5
を使用しstd::vector
ます。
std::vector< std::vector<int> > my_array; /* 2D Array */
my_array.size(); /* size of y */
my_array[0].size(); /* size of x */
または、古き良き配列しか使用できない場合は、sizeof
.
sizeof( my_array ); /* y size */
sizeof( my_array[0] ); /* x size */
sizeof(yourObj)/sizeOf(yourObj[0])
トリックを行う必要があります
#include<iostream>
using namespace std ;
int main()
{
int A[3][4] = { {1,2,3,4} , {4,5,7,8} , {9,10,11,12} } ;
for(int rows=0 ; rows<sizeof(A)/sizeof(*A) ; rows++)
{
for(int columns=0 ; columns< sizeof(*A) / sizeof(*A[0]) ; columns++)
{
cout<<A[rows][columns] <<"\t" ;
}
cout<<endl ;
}
}
int arr[5][4];
行の添字の場合 (4 を 2 に上げ、powを使用するために cmath を含めます):
sizeof(arr1)/pow(4,2)
列の添字:
sizeof(*arr1)/4
4 は 4 バイトを意味し、サイズは int です。
上記の他の回答は、最初の質問への回答です。2番目の質問、設定されていない値を取得するエラーを検出する方法については、次の状況のどれを意味するのかわかりません。
無効なインデックスを使用した配列要素へのアクセス:
std::vector を使用する場合、[] 演算子の代わりに vector::at 関数を使用して値を取得できます。インデックスが無効な場合、out_of_range 例外がスローされます。
有効なインデックスにアクセスしているが、要素がまだ設定されていない: 私の知る限り、直接的な方法はありません。ただし、次の一般的な方法で問題を解決できる可能性があります。 (1) すべての要素を、持つことが不可能であると確信している値に初期化します。たとえば、正の整数を扱っている場合は、すべての要素を -1 に設定します。これにより、値が -1 であることがわかったときに値がまだ設定されていないことがわかります。(2)。同じサイズの bool 配列を使用して、同じインデックスの要素が設定されているかどうかを示すだけです。これは、すべての値が「可能」である場合に適用されます。
これは、2 次元配列の行と列のサイズを取得するためにも試行できます。
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
int rows = matrix.size();
int cols = matrix[0].size();
cout<<rows<< " "<<cols;
出力: 3 4