プログラム 技術

C++で配列の要素数を求める

C#だと配列にLengthというプロパティがあるので、気にならないのですがC++だと配列にはLengthといったプロパティがないため、自前で関数等を用意する必要があります

要素数のプロパティを持つものもある

C++の配列では要素数をプロパティとして持っていませんが、配列と似たように使えるstd::listやstd::vectorといったものは要素数をプロパティとして保持しています

std::list<int> targetList = {100, 23, 41, 58, 90 };
std::vector<int> targetVector = { 12, 1, 20, 5 };

// size()が要素数を持っている
printf("listの要素数 : %d\n", targetList.size());       // 5
printf("vectorの要素数 : %d\n", targetVector.size());   // 4

vectorやlistについては以下のサイトを参照してください

参考サイト
vectorとlistとmapて何が違うねんっちゅうお話。 #C++ - Qiita
vectorとlistとmapて何が違うねんっちゅうお話。 #C++ - Qiita

#はじめに初心者の初心者による初心者のためのどうとやらです。それぞれ通常の配列との違いをまとめたのち、3つの違いをまとめ ...

続きを読む

std::listの罠

listは要素数を指定して生成できますが、それを忘れてpush_backで値を追加すると、最初に生成した要素数の後ろに追加される形になるので要素数が増えてしまいます。そのため、listは要素数を指定しないか、要素内容を指定して生成が良いかもしれません

// あらかじめ要素数3で生成
std::list<int> targetList(3);
printf("listの要素数 : %d\n", targetList.size());  // 3

// 値の追加
targetList.push_back(100);
targetList.push_back(4);
printf("listの要素数 : %d\n", targetList.size());  // 5

// 上記現象を避けるため生成は以下の方法が良いかも
std::list<int> targetList;               //要素数を指定しない
std::list<int> targetList = { 100, 23 }; //あらかじめ要素内容を指定する

実際に配列から要素数を取得する

まず初めは、C++だけでなく、C言語でも使える昔からあるやり方です

int targetArray[] = {10, 5, 1, 3, 7 };
int length = sizeof(targetArray) / sizeof(targetArray[0]);
printf("配列の要素数 : %d\n", length); // 5

C++から最近?使えるようになったsizeというものでも要素数を取得することができます

int targetArray[] = {10, 5, 1, 3, 7 };
int length = std::size(targetArray);
printf("配列の要素数 : %d\n", length); // 5

-プログラム, 技術
-