ためすう

priority_queue を使ってみる (C++)

2019-12-30

やったこと

priority_queue を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {
    int a[] = {3, 5, 2, 1, 9, 8};

    // 降順
    priority_queue<int> pq;

    // 昇順
    priority_queue<int, vector<int>, greater<int>> pq2;

    for (int i = 0; i < 6; i++) {
        pq.push(a[i]);
        pq2.push(a[i]);
    }

    while (!pq.empty()) {
        cout << pq.top() << " ";
        pq.pop();
    }
    cout << endl;


    while (!pq2.empty()) {
        cout << pq2.top() << " ";
        pq2.pop();
    }
    cout << endl;
}

出力結果

9 8 5 3 2 1
1 2 3 5 8 9

参考

deque を使ってみる (C++)

2019-12-30

やったこと

deque を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

> std::deque (double-ended queue) は先頭と末尾の両方に高速な挿入と削除が行えるインデックス付きのシーケンスコンテナです。

test.cpp

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

int main() {
    deque<int> d = {2, 4, 6};
    d.push_front(100);
    d.push_back(333);

    for (int v : d) {
        cout << v << " ";
    }
    cout << endl;
}

出力結果

100 2 4 6 333

参考

getline を使ってみる (C++)

2019-12-29

やったこと

標準入力で空白文字を受け取るため、getline を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {
    string t;
    getline(cin, t);
    cout << t << endl;
}

出力結果

a b c (入力)
a b c

参考

erase を使ってみる (C++)

2019-12-29

やったこと

erase を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {
    string t = "abcdefg";
    t.erase(1, 2);
    cout << t << endl;

    vector<int> v = {1, 3, 5, 7};
    v.erase(v.begin() + 2);
    for (auto iter = v.begin(); iter != v.end(); iter++) {
        cout << *iter << endl;
    }
}

出力結果

adefg
1
3
7

参考

tuple を使う (C++)

2019-12-29

やったこと

tuple を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {
    tuple<int, char, string> t = make_tuple(1, 'a', "abcd");
    cout << get<0>(t) << endl;
    cout << get<1>(t) << endl;
    cout << get<2>(t) << endl;
}

出力結果

1
a
abcd

参考

unique を使ってみる (C++)

2019-12-26

やったこと

to_string を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

この関数は、隣り合った重複要素を除いた要素を、範囲の先頭に集める。

test.cpp

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

int main() {
    vector<int> v = {1, 2, 1, 3, 2, 4, 5};
    sort(v.begin(), v.end());
    auto iter = unique(v.begin(), v.end());

    v.erase(iter, v.end());

    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << endl;;
    }
}

出力結果

1
2
3
4
5

参考

to_string を使ってみる (C++)

2019-12-24

やったこと

to_string を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {
    int d = 123;

    cout << typeid(d).name() << endl;
    cout << to_string(d) << endl;
    cout << typeid(to_string(d)).name() << endl;
}

出力結果

i
123
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

参考

指数構文を使う (C++)

2019-12-22

やったこと

指数構文の e を使って数字を表示してみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {
    cout << 1e3 << endl;
    cout << 0.123e2 << endl;
}

出力結果

1000
12.3

参考

isupper islower を使ってみる (C++)

2019-12-21

やったこと

下記を使って大文字、小文字を判別します。

  • isupper
  • islower

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {

    cout << isupper('e') << endl;
    cout << islower('e') << endl;

    cout << isupper('E') << endl;
    cout << islower('E') << endl;
}

出力結果

0
1
1
0

参考

vector で先頭の要素と最後の要素にアクセスする (C++)

2019-12-20

やったこと

vector で最初と最後の要素にアクセスします。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

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

int main() {
    vector<int> B = {7, 0, 9};
    cout << B.front() << endl;
    cout << B.back() << endl;
}

出力結果

7
9

参考