Upgrade to Pro — share decks privately, control downloads, hide ads and more …

C++ 初心者会 第 1 回資料

C++ 初心者会 第 1 回資料

Avatar for Ryohei Kobayashi

Ryohei Kobayashi

June 02, 2022

Other Decks in Programming

Transcript

  1. 今回の内容 簡単な STL を勉強します • E869120 さんが紹介していた STL の機能の 1/3

    • min, max, gcd, abs : 数学の関数 • vector, string : データ型 • sort, reverse : データの操作 • 余った時間でバチャ 2
  2. 来週以降の内容 • E869120 さんが紹介していた STL の機能の あまり • map, unordered_map,

    set, unordered_set • queue, stack, priority_queue • lower_bound, upper_bound • 基本的なアルゴリズムとデータ構造 • 累積和 • 二分探索 • 深さ優先探索 / 幅優先探索 • 数学系のアルゴリズム 3
  3. 最小値 / 最大値 min(a, b) : a, b の最小値を返す max(a,

    b) : a, b の最大値を返す int a = 2, b = -5, c = 7; cout << min(a, b) << " " << max(a, b) << endl; cout << max({a, b, c}) << endl; // {} を使うと 3 つ以上指定できる cout << max("hoge", "fuga") << endl; int v[10] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3}; int max_v = v[0]; for (int i = 0; i < 10; i++){ max_v = max(max_v, v[i]); } cout << max_v << endl; 4
  4. 絶対値 abs(x) : x の絶対値を返す int a = 2, b

    = -5; cout << abs(a) << " " << abs(b) << endl; double x = -3.1, y = 1.11; cout << abs(x - y) << endl; 5
  5. 最大公約数, 最小公倍数 gcd(a, b) : a, b の最大公約数を返す lcm(a, b)

    : a, b の最小公倍数を返す int a = 12, b = 20, c = 11; cout << gcd(a, b) << " " << gcd(a, c) << endl; cout << lcm(a, b) << " " << lcm(a, c) << endl; 6
  6. 動的配列 vector<型> 変数名 みたいな感じで宣言する 変数名のあとで要素数や初期値を指定して初期化できる vector<int> a; // 要素数 0,

    int 型の動的配列 a を作る vector<int> b(10); // 要素数 10, 初期値がすべて 0 vector<int> c(5, -1); // 要素数 5, 初期値がすべて -1 vector<int> d = {3, 1, 4, 1, 5}; // 要素数 5, 初期値 3, 1, 4, 1, 5 vector<double> e = {2.3, 4.5}; // 要素数 2, 初期値 2.3, 4.5 vector<string> f(20, "abcd"); // 要素数 20, 初期値がすべて "abcd" 7
  7. 動的配列 vector に対してできる操作(メンバ関数) • push_back(x) : 末尾への要素 x の追加 •

    pop_back : 末尾の要素の削除 • size : 要素数を返す • operator[] : i 番目の要素を参照、代入 • assign(n, x) : 要素数を n に変更して値をすべて x にする 他にもいろいろある 8
  8. 動的配列 vector<int> a(5); // 要素数 5 の動的配列を宣言 a.assign(3, -1); //

    a の要素数を 3 にして値をすべて -1 にする a.pop_back(); // a の末尾の要素を削除する a.push_back(4); // a の末尾に要素 4 を追加する a.push_back(10); // a の末尾に要素 10 を追加する a.pop_back(); // a の末尾の要素を削除する a.push_back(20); // a の末尾に要素 20 を追加する for (int i = 0; i < a.size(); i++){ // i < a の要素数 cout << a[i] << endl; // a の i 番目(0-indexed) の要素を出力する } 9
  9. 文字列 string に対してできる操作(メンバ関数) • push_back(x) : 末尾へ文字 x の追加 •

    pop_back : 末尾の文字の削除 • size : 文字数を返す • operator[] : i 番目の文字を参照、代入 • assign(n, x) : 文字数を n に変更して値をすべて x にする 11
  10. 文字列 12 string a(5, 'a'); // a = "aaaaa"; a.assign(3,

    'b'); // a = "bbb"; a.pop_back(); // a = "bb" a.push_back('c'); // a = "bbc"; a.push_back('d'); // a = "bbcd"; a.pop_back(); // a = "bbc"; a.push_back('e'); // a = "bbce"; cout << a << endl;
  11. 文字列 string に対してできる操作(続き) • += x : 末尾へ文字列 x の追加

    • substr(pos, n) : pos 番目から n 文字の文字列を返す 他にもいろいろある 13
  12. 文字列 14 string a = "hoge"; a += "fuga"; //

    a = "hogefuga" cout << a << endl; a += a; // a = "hogefugahogefuga"; cout << a << endl; cout << a.substr(3, 4) << endl; // efug cout << a.substr(3) << endl; // 長さを指定しないと文字列の最後まで出力する
  13. 文字列 string と整数の相互変換 • to_string(x) : 整数 x を表す文字列を返す(整数 =>

    string) • stoi(s) : 文字列 s を数値として読み取った数値(int)を返す • stoll(s) : stoi() の string => long long バージョン 15
  14. 文字列 16 int a = 1234; string s = to_string(a)

    + "56"; // s = "123456" int b = stoi(s) * 2; // b = 123456 * 2 cout << b << endl; string t = "124567890123"; long long c = stoll(t) * 2; cout << c << endl;
  15. ソート sort(a, a + n) : 配列 a の先頭から n

    要素を昇順ソートする sort(a.begin(), a.end()) : 動的配列 a の全体をソート sort(a.begin(), a.end(), greater<型>()): 降順ソート int a[5] = {3, 1, 4, 1, 5}; sort(a, a + 5); vector<int> b = {9, 2, 1, 4, 3}; sort(b.begin(), b.end()); sort(b.begin(), b.end(), greater<int>()); string s = "tuatmcc123"; sort(s.begin(), s.end()); // 実は文字列(の内部?)もソートできる cout << s << endl; 17