C++ 文字列を任意の回数繰り返す無名関数

最近 C++ を齧り始めました

C++ で char を繰り返す関数はあるのですが、文字列を繰り返す関数が見つからなかったので無名関数で出来ないか考えました。

#include <bits/stdc++.h>
using namespace std;

int main() {
  string str;
  str = "abc";
  int n = 3;
  auto tempfunc = [](int x, string a){string acc=""; for(int i =0;i < x; i++) acc += a; return acc; };

  cout << tempfunc(3,str) << endl;
  cout <<  [](int x, string a){string acc=""; for(int i =0;i < x; i++) acc += a; return acc; }(4,"defg") << endl;

}

アウトプットは

abcabcabc
defgdefgdefgdefg

となりました。

基本は [](){}() なので意外に覚えやすい。[] が無名関数が始まりますよー、という合図で本体は {} の中。2番目と最後の括弧 () が変数(引数)を扱う場所。本体の中で戻り値を return で指定できるので、関数言語のように関数の受け渡しが出来る。

と言う理解であってるかな?

あ、ぜんぜん違うね。上の例では無名関数の戻り値を使っているだけで関数を受け渡しているわけではない。もう少し実験すればわかるかもしれないけど、まだそのレベルでないのでいまはここまで。