template <class T, class Allocator = allocator<T>> class forward_list
#include <forward_list> using namespace std; forward_list<T> 変数名; forward_list<int> x; // 空の forward_list forward_list<int> x(3); // 要素数が 3 forward_list<int> x(5, 10); // 5 つの要素を 10 で初期化 forward_list<int> x(y.it1, y.it2); // it1 から it2 の範囲で初期化 forward_list<int> x(y); // forward_list y で初期化 forward_list<int> x ({1, 2, 3}); // 初期化子リスト forward_list<int> x {1, 2, 3}; // 初期化子リスト forward_list<int> x = {1, 2, 3}; // 初期化子リスト
forward_list<pair<int, double>> fl; fl.emplace_front(5, 3.14); fl.emplace_front(make_pair(5, 3.14)); fl.push_front(make_pair(10, 1.23)); for (auto x : fl) cout << x.first << " " << x.second << endl;
== < <= != > >=
#include <iostream> #include <forward_list> using namespace std; //bool GT5(int x) { // return x > 5; //} class GT5 : public unary_function<int, bool> { public: result_type operator() (argument_type k) { return (result_type)(k > 5); } }; int main() { // 初期状態 forward_list<int> fl1 = { 3, 1, 1, 5, 2, 10, 1, 1, 3, 4, 1, 0, 1}; size_t size = distance(fl1.begin(), fl1.end()); cout << "**初期状態 fl1** size " << size << endl; for (auto x : fl1) cout << " " << x; cout << endl; // 先頭に要素を追加 cout << "**先頭に要素を追加**\n"; fl1.push_front(0); // fl1.emplace_front(0); for (auto x : fl1) cout << " " << x; cout << endl; // 2 番目の要素を削除 cout << "**2 番目の要素を削除**\n"; fl1.erase_after(fl1.begin()); for (auto x : fl1) cout << " " << x; cout << endl; // 値が 0,及び,5 より大きい要素を削除 cout << "**値が 0,及び,5 より大きい要素を削除**\n"; fl1.remove(0); fl1.remove_if(GT5()); // 単項関数オブジェクト // fl1.remove_if(GT5); // 関数 // fl1.remove_if([](int x){ return x > 5; }); // ラムダ式 for (auto x : fl1) cout << " " << x; cout << endl; // {4, 5, 6, 7} を要素とする fl2 を生成 cout << "**{4, 5, 6, 7} を要素とする fl2 を生成**\n"; forward_list<int> fl2; fl2.assign({4, 5, 6, 7}); for (auto x : fl2) cout << " " << x; cout << endl; // fl1 から連続する 1 を削除(sort前) cout << "**fl1 から連続する 1 を削除(sort前)**\n"; fl1.unique(); for (auto x : fl1) cout << " " << x; cout << endl; // fl1 から連続する 1 を削除(sort後) cout << "**fl1 から連続する 1 を削除(sort後)**\n"; fl1.sort(); fl1.unique(); for (auto x : fl1) cout << " " << x; cout << endl; // fl1 と fl2 をマージ cout << "**fl1 と fl2 をマージ**\n"; fl1.merge(fl2); for (auto x : fl1) cout << " " << x; cout << endl; return 0; }
**初期状態 fl1** size 13 3 1 1 5 2 10 1 1 3 4 1 0 1 **先頭に要素を追加** 0 3 1 1 5 2 10 1 1 3 4 1 0 1 **2 番目の要素を削除** 0 1 1 5 2 10 1 1 3 4 1 0 1 **値が 0,及び,5 より大きい要素を削除** 1 1 5 2 1 1 3 4 1 1 **{4, 5, 6, 7} を要素とする fl2 を生成** 4 5 6 7 **fl1 から連続する 1 を削除(sort前)** 1 5 2 1 3 4 1 **fl1 から連続する 1 を削除(sort後)** 1 2 3 4 5 **fl1 と fl2 をマージ** 1 2 3 4 4 5 5 6 7
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |