template <class T, class Allocator = allocator<T>> class list
#include <list> using namespace std; list <T> 変数名; list<int> x; // 空の list list<int> x(3); // 要素数が 3,C++11 list<int> x(5, 10); // 5 つの要素を 10 で初期化,C++11 list<int> x(y.it1, y.it2); // it1 から it2 の範囲で初期化 list<int> x(y); // list y で初期化 list<int> x ({1, 2, 3}); // 初期化子リスト,C++11 list<int> x {1, 2, 3}; // 初期化子リスト,C++11 list<int> x = {1, 2, 3}; // 初期化子リスト,C++11
list<pair<int, double>> lst; lst.emplace(lst.begin(), 5, 3.14); lst.emplace(lst.begin(), make_pair(5, 3.14)); lst.insert(lst.begin(), make_pair(10, 1.23)); for (auto x : lst) cout << x.first << " " << x.second << endl;
= == < <= != > >=
#include <iostream> #include <list> using namespace std; //bool is_odd(int x) { // return x % 2 > 0; //} class is_odd : public unary_function<int, bool> { public: result_type operator() (argument_type k) { return (result_type)(k % 2); } }; void print(string str, list<int> &ls) { if (ls.empty()) cout << " コンテナ " << str << " は空です\n"; else { cout << str << " の要素数: " << ls.size() << endl; for (auto x : ls) cout << " " << x; // list<int>::iterator it; // for (it = ls.begin(); it != ls.end(); it++) // cout << " " << *it; cout << endl; } } int main() { // 要素を最後に追加(サイズは自動的に増加) cout << "**初期設定**\n"; list<int> ls1; ls1.push_back(0); ls1.push_back(2); ls1.push_back(4); ls1.push_back(3); ls1.push_back(1); print("ls1", ls1); // list<int> ls1 = {0, 2, 4, 3, 1}; // 2 番目の要素の前,及び,先頭に要素を追加 cout << "**2 番目の要素の前,及び,先頭に要素を追加**\n"; list<int>::iterator it = ls1.begin(); it++; ls1.insert(it, 5); // ls1.emplace(it, 5); ls1.push_front(-1); print("ls1", ls1); // 3 番目の要素,最初,及び,最後の要素を削除 cout << "**3 番目の要素,最初,及び,最後の要素を削除**\n"; it = ls1.begin(); it++; it++; ls1.erase(it); ls1.pop_front(); ls1.pop_back(); print("ls1", ls1); // 値が 2 である要素,及び,奇数である要素を削除 cout << "**値が 2 である要素,及び,奇数である要素を削除**\n"; ls1.remove(2); ls1.remove_if(is_odd()); // 単項関数オブジェクト // ls1.remove_if(is_odd); // 関数 // ls1.remove_if([](int x){ return x%2 > 0; }); // ラムダ式 print("ls1", ls1); // 演算子で比較 cout << "**比較**\n"; list<int> ls2 = {0, 4}; print("ls2", ls2); if (ls1 == ls2) cout << " 2 つのコンテナ内の要素はすべて等しい\n"; // ls2 の 2 番目の要素を ls1 に代入 cout << "**ls2 の 2 番目の要素を ls1 に代入**\n"; it = ls2.begin(); it++; ls1.assign(it, ls2.end()); print("ls1", ls1); // ls1 と ls2 を入れ替える cout << "**ls1 と ls2 を入れ替える**\n"; print("入れ替え前:ls1", ls1); print("入れ替え前:ls2", ls2); ls1.swap(ls2); print("ls1", ls1); print("ls2", ls2); // ls1 のすべての要素を削除 cout << "**ls1 のすべての要素を削除**\n"; ls1.clear(); print("ls1", ls1); return 0; }
**初期設定** ls1 の要素数: 5 0 2 4 3 1 **2 番目の要素の前,及び,先頭に要素を追加** ls1 の要素数: 7 -1 0 5 2 4 3 1 **3 番目の要素,最初,及び,最後の要素を削除** ls1 の要素数: 4 0 2 4 3 **値が 2 である要素,及び,奇数である要素を削除** ls1 の要素数: 2 0 4 **比較** ls2 の要素数: 2 0 4 2 つのコンテナ内の要素はすべて等しい **ls2 の 2 番目の要素を ls1 に代入** ls1 の要素数: 1 4 **ls1 と ls2 を入れ替える** 入れ替え前:ls1 の要素数: 1 4 入れ替え前:ls2 の要素数: 2 0 4 ls1 の要素数: 2 0 4 ls2 の要素数: 1 4 **ls1 のすべての要素を削除** コンテナ ls1 は空です
#include <iostream> #include <list> #include <functional> using namespace std; void print(string str, list<int> &ls) { if (ls.empty()) cout << "コンテナ " << str << " は空です\n"; else { cout << str << " の要素数: " << ls.size() << endl; for (auto x : ls) printf(" %d", x); printf("\n"); } } int main() { // ls1,ls2 の初期化 cout << "**初期設定**\n"; list<int> ls1 = {5, 0, 2, 0, 3}; print("ls1", ls1); list<int> ls2 = {0, 3, 0, 4, 1}; print("ls2", ls2); // ls1,ls2 の sort cout << "**ls1,ls2 の sort**\n"; ls1.sort(less<int>()); // 二項関数オブジェクト less print("ls1", ls1); ls2.sort(less<int>()); print("ls2", ls2); // マージ cout << "**マージ**\n"; ls1.merge(ls2, less<int>()); print("ls1", ls1); print("ls2", ls2); // 同じ要素を削除 cout << "**同じ要素を削除**\n"; ls1.unique(); print("ls1", ls1); // ls2 の 2 番目の要素を ls1 の 3 番目の要素の前に接続 cout << "**ls2 の 2 番目の要素を ls1 の 3 番目の要素の前に接続**\n"; ls2.push_back(6); ls2.push_back(7); ls2.push_back(8); print("ls2", ls2); list<int>::iterator it1; it1 = ls1.begin(); it1++; it1++; list<int>::iterator it2; it2 = ls2.begin(); it2++; ls1.splice(it1, ls2, it2);; print("ls1", ls1); print("ls2", ls2); return 0; }
**初期設定** ls1 の要素数: 5 5 0 2 0 3 ls2 の要素数: 5 0 3 0 4 1 **ls1,ls2 の sort** ls1 の要素数: 5 0 0 2 3 5 ls2 の要素数: 5 0 0 1 3 4 **マージ** ls1 の要素数: 10 0 0 0 0 1 2 3 3 4 5 コンテナ ls2 は空です **同じ要素を削除** ls1 の要素数: 6 0 1 2 3 4 5 **ls2 の 2 番目の要素を ls1 の 3 番目の要素の前に接続** ls2 の要素数: 3 6 7 8 ls1 の要素数: 7 0 1 7 2 3 4 5 ls2 の要素数: 2 6 8
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |