アプリケーション開発ポータルサイト
ServerNote.NET
ServerNote.NET厳選キャンペーン・クーポンはこちら!
カテゴリー【C/C++
通常のC言語配列にstd::for_each,find_if等のC++ラムダ式ループを適用する
POSTED BY
2023-01-19

std::for_each,find_if,sort,accumulate等のC++ラムダ式ループ構文はvector.begin(),end()だけでなく、通常のC言語配列に対してもループできる。

この場合はvector.begin()の代わりに配列の先頭アドレス=array[5]ならarray、vector.end()の代わりに配列の先頭アドレス+要素数=array[5]ならarray + 5と記載するだけでよい。

サンプルは以下。

C/C++ramda_loop_for_carray.cppGitHub Source
#include <iostream>
#include <cstring>
#include <algorithm>

int main(void) {
  struct {
    char key[32];
    char value[64];
  }arrays[8] = {
    {"きー1", "ばりゅー1"},
    {"きー2", "ばりゅー2"},
    {"きー3", "ばりゅー3"},
    {"きー4", "ばりゅー4"},
    {"きー5", "ばりゅー5"},
    {"きー6", "ばりゅー6"},
    {"きー7", "ばりゅー7"},
    {"きー8", "ばりゅー8"},
  };

  //ループ出力
  std::for_each(arrays, arrays + 8, [&](auto &c) {
    std::cout << c.key << "+" << c.value << std::endl;
  });

  //値に5を含む要素の検索
  auto itr = std::find_if(arrays, arrays + 8, [&](auto &c) {
    return strstr(c.value, "5") ? true:false;
  });
  if(itr != arrays + 8) {
    //発見した場合itrは要素のアドレス: itr->key, itr->valueでアクセス可能
    int i = std::distance(arrays, itr);
    std::cout << "arrays[" << i << "].valueに5発見" << std::endl;
  }

  return 0;
}

コンパイル、実行結果

g++ ramda_loop_for_carray.cpp
./a.out

きー1+ばりゅー1
きー2+ばりゅー2
きー3+ばりゅー3
きー4+ばりゅー4
きー5+ばりゅー5
きー6+ばりゅー6
きー7+ばりゅー7
きー8+ばりゅー8
arrays[4].valueに5発見

ループで渡ってくる参照引数cは対象配列内要素そのものなので、構造体配列なら.で各値にアクセス可能。

find_ifも適用可能で、条件を満たす要素が見つかったらfind_ifループを抜ける。

itrには発見要素のアドレスが返るので、itr→key、itr→valueでアクセス可能。未発見ならvector.end()に代わりarrays + 8がitrに返る。

何番目の要素かstd::distanceにitrを指定して配列のindexも取得できる。

世界が認めたW受賞成分配合で、目もとを狙い撃ち!【RF28】
気になるまぶた・目じりに乾燥を刻んでしまう前に、 目もと専用クリームでしっかりケアを。 ▼量より質!コ...READ MORE
【利用料0円!】<法人携帯>日本最大級のBtoB見積比較サービス【一括.jp】
法人携帯の導入をご検討なら【法人携帯 一括.jp】 一括.jp/法人携帯では、法人携帯の導入をお考えのお客...READ MORE
天然水でもっとも安い ウォーターサーバー「アクアセレクト」
天然水宅配サービス「アクアセレクト」のウォーターサーバーの新規設置を募集するプログラムです。 ミネラ...READ MORE
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【webmaster/管理人】
自営業プログラマー
ご連絡は以下アドレスまで★

☆ServerNote.NETショッピング↓
ShoppingNote
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】