プログラム 技術

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

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

-プログラム, 技術
-