// vectorの使用例 #include < iostream> #include < vector> using namespace std; int main() { vector< int> v(10); // 長さ10のベクタを作成する int i; // vの元の大きさを表示する cout << "Size = " << v.size() << endl; // ベクタの各要素に値を代入する for(i=0; i< 10; i++) v[i] = i; // ベクタの要素を表示する cout << "Current Contents:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << "\n\n"; cout << "Expanding vector\n"; // ベクタの最後に値を追加すると、ベクタは必要に応じて拡大する for(i=0; i< 5; i++) v.push_back(i + 10); // の現在の大きさを表示する cout << "Size now = " << v.size() << endl; // ベクタの要素を表示する cout << "Current contents:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << "\n\n"; // ベクタの要素を変更する for(i=0; i< v.size(); i++) v[i] = -v[i]; cout << "Modified Contents:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << endl; return 0; }
// pop_back()とempty()を使用する #include < iostream> #include < vector> using namespace std; int main() { vector< char> v; int i; for(i=0; i<10; i++) v.push_back(i + 'A'); cout << "Vector's original contents:\n"; for(i=0; i < v.size(); i++) cout << v[i] << " "; cout << "\n\n"; do { v.pop_back(); // 末尾から要素を削除する cout << "Vector now contains:\n"; for(i=0; i < v.size(); i++) cout << v[i] << " "; cout << endl; } while(!v.empty()); return 0; }
// 反復子を介してベクタの要素にアクセスする #include < iostream> #include < vector> using namespace std; int main() { vector< int> v(10); // 長さ10のベクタを作成する vector< int>::iterator p; // 反復子を作成する int i; // ベクタの要素に値を代入する p = v.begin(); i = 0; while(p != v.end()) { *p = i; // pを介してvにiを書き込む p++; // 反復子を進める i++; } // ベクタの要素を表示する cout << "Original contents:\n"; p = v.begin(); while(p != v.end()) { cout << *p << " "; p++; } cout << "\n\n"; // ベクタの要素を変更する p = v.begin(); while(p != v.end()) { *p = *p * 2; p++; } // ベクタの要素を表示する cout << "Modified Contents:\n"; p = v.begin(); while(p != v.end()) { cout << *p << " "; p++; } cout << endl; return 0; }
// end()を理解する #include < iostream> #include < vector> using namespace std; int main() { vector< int> v; // 空のベクタを作成する int i; for(i=0; i<10; i++) v.push_back(i); cout << "Vector printed forwards:\n"; vector< int>::iterator p = v.begin(); while(p != v.end()) { cout << *p << " "; p++; } cout << "\n\n"; cout << "Vector printed backwards:\n"; p = v.end(); while(p != v.begin()) { p--; // 使用する前に反復子をデクリメントする cout << *p << " "; } return 0; }
// 挿入と削除の例 #include < iostream> #include < vector> using namespace std; int main() { vector< char> v(10); vector< char> v2; char str[] = "< Vector>"; int i; // vを初期化する for(i=0; i<10; i++) v[i] = i + 'a'; // str内の文字をv2にコピーする for(i=0; str[i]; i++) v2.push_back(str[i]); // ベクタの元の内容を表示する cout << "Original contents of v:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << "\n\n"; vector< char>::iterator p = v.begin(); p += 2; // 3番目の要素を指す // vに10個のXを挿入する v.insert(p, 10, 'X'); // 挿入後の要素を表示する cout << "Size after inserting X's = " << v.size() << endl; cout << "Contents after insert:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << "\n\n"; // これらの要素を削除する p = v.begin(); p += 2; // 3番目の要素を指す v.erase(p, p+10); // 次の10個の要素を削除する // 削除後の要素を表示する cout << "Size after erase = " << v.size() << endl; cout << "Contents after erase:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << "\n\n"; // v2をvに挿入する v.insert(p, v2.begin(), v2.end()); cout << "Size after v2's insertion = "; cout << v.size() << endl; cout << "Contents after insert:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << endl; return 0; }
// listを使用する #include < iostream> #include < list> using namespace std; int main() { list< int> lst; // 空のlistを作成する int i; for(i=0; i<10; i++) lst.push_back(i); cout << "Size = " << lst.size() << endl; cout << "Contents: "; list< int>::iterator p = lst.begin(); while(p != lst.end()) { cout << *p << " "; p++; } cout << "\n\n"; // listの要素を変更する p = lst.begin(); while(p != lst.end()) { *p = *p + 100; p++; } cout << "Contents modified: "; p = lst.begin(); while(p != lst.end()) { cout << *p << " "; p++; } return 0; }
// リストの結合とマージを行う #include < iostream> #include < list> using namespace std; int main() { list< char> lst1, lst2, lst3; int i; for(i=0; i<10; i+=2) lst1.push_back(i + 'A'); for(i=1; i<11; i+=2) lst2.push_back(i + 'A'); cout << "Contents of lst1:\n"; list< char>::iterator p = lst1.begin(); while(p != lst1.end()) { cout << *p << " "; p++; } cout << "\n\n"; cout << "Contents of lst2:\n"; p = lst2.begin(); while(p != lst2.end()) { cout << *p << " "; p++; } cout << "\n\n"; // 2つのリストをマージする lst1.merge(lst2); if(lst2.empty()) cout << "lst2 is now empty\n"; cout << "Contents of lst1 after merge:\n"; p = lst1.begin(); while(p != lst1.end()) { cout << *p << " "; p++; } cout << "\n\n"; // push_front()を使ってほかのリストを作成する char str[] = "-splicing-"; for(i=0; str[i]; i++) lst3.push_back(str[i]); cout << "Contents of lst3:\n"; p = lst3.begin(); while(p != lst3.end()) { cout << *p << " "; p++; } cout << "\n\n"; // 2つのリストを結合する p = lst1.begin(); while(p != lst1.end()) { if(*p == 'F') lst1.splice(p, lst3); p++; } cout << "Contents of lst1 after splice:\n"; p = lst1.begin(); while(p != lst1.end()) { cout << *p << " "; p++; } return 0; }
// push_back()とpush_front()の違いを示すコード #include < iostream> #include < list> using namespace std; int main() { list< int> lst1, lst2; int i; for(i=0; i<10; i++) lst1.push_back(i); for(i=0; i<10; i++) lst2.push_front(i); list< int>::iterator p; cout << "Contents of lst1:\n"; p = lst1.begin(); while(p != lst1.end()) { cout << *p << " "; p++; } cout << "\n\n"; cout << "Contents of lst2:\n"; p = lst2.begin(); while(p != lst2.end()) { cout << *p << " "; p++; } return 0; }
// count()の使用例 #include < iostream> #include < vector> #include < cstdlib> #include < algorithm> using namespace std; int main() { vector< bool> v; int i; for(i=0; i < 10; i++) { if(rand() % 2) v.push_back(true); else v.push_back(false); } cout << "Sequence:\n"; for(i=0; i< v.size(); i++) cout << boolalpha << v[i] << " "; cout << endl; i = count(v.begin(), v.end(), true); cout << i << " elements are true.\n"; return 0; }
// count_if()の使用例 #include < iostream> #include < vector> #include < algorithm> using namespace std; // 数が偶数かどうかを判定する単項述語 bool isEven(int i) { return !(i%2); return false; } int main() { vector< int> v; int i; for(i=1; i < 20; i++) v.push_back(i); cout << "Sequence:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << endl; i = count_if(v.begin(), v.end(), isEven); cout << i << " numbers are evenly divisible by 2.\n"; return 0; }
// remove_copy()とreplace_copy()の使用例 #include < iostream> #include < vector> #include < algorithm> using namespace std; int main() { char str[]="Algorithms operate on containers through iterators."; vector< char> v, v2(100); vector< char>::iterator p; int i; for(i=0; str[i]; i++) v.push_back(str[i]); // **** remove_copy()の例 **** cout << "Input sequence:\n"; for(i=0; i< v.size(); i++) cout << v[i]; cout << endl; // すべての空白文字を削除する p = remove_copy(v.begin(), v.end(), v2.begin(), ' '); cout << "Result after removing spaces:\n"; for(i=0; i< p-v2.begin(); i++) cout << v2[i]; cout << "\n\n"; // **** replace_copy()の例 **** cout << "Input sequence:\n"; for(i=0; i< v.size(); i++) cout << v[i]; cout << endl; // 空白文字を+記号に置換する p = replace_copy(v.begin(), v.end(), v2.begin(), ' ', '+'); cout << "Result after replacing spaces with +'s:\n"; for(i=0; i< p-v2.begin(); i++) cout << v2[i]; cout << "\n\n"; return 0; }
// reverseの使用例 #include < iostream> #include < vector> #include < algorithm> using namespace std; int main() { vector< int> v; int i; for(i=0; i<10; i++) v.push_back(i); cout << "Initial: "; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << endl; reverse(v.begin(), v.end()); cout << "Reversed: "; for(i=0; i< v.size(); i++) cout << v[i] << " "; return 0; }
// 変換アルゴリズムの例 #include < iostream> #include < list> #include < algorithm> using namespace std; // 簡単な変換関数 double reciprocal(double i) { return 1.0/i; // 逆数を返す } int main() { list< double> vals; int i; // リストに値を入れる for(i=1; i<10; i++) vals.push_back((double)i); cout << "Original contents of vals:\n"; list< double>::iterator p = vals.begin(); while(p != vals.end()) { cout << *p << " "; p++; } cout << endl; // 値の変換 p = transform(vals.begin(), vals.end(), vals.begin(), reciprocal); cout << "Transformed contents of vals:\n"; p = vals.begin(); while(p != vals.end()) { cout << *p << " "; p++; } return 0; }
// リストをベクタにコピーする #include < iostream> #include < vector> #include < list> #include < algorithm> using namespace std; int main() { vector< char> v(20); list< char> lst; int i; // ベクタを初期化する for(i=0; i<20; i++) v[i] = 'A' + i; cout << "Original contents of vector:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; cout << "\n\n"; // リストを初期化する char str[] = "-STL Power-"; for(i = 0; str[i]; i++) lst.push_back(str[i]); // lstをvにコピーする copy(lst.begin(), lst.end(), v.begin()); // 結果の表示する cout << "Contents of vector after copy:\n"; for(i=0; i< v.size(); i++) cout << v[i] << " "; return 0; }
// 単項関数オブジェクトを使用する #include < iostream> #include < list> #include < functional> #include < algorithm> using namespace std; int main() { list< double> vals; int i; // リストに値を入れる for(i=1; i<10; i++) vals.push_back((double)i); cout << "Original contents of vals:\n"; list< double>::iterator p = vals.begin(); while(p != vals.end()) { cout << *p << " "; p++; } cout << endl; // negate関数オブジェクトを使用する p = transform(vals.begin(), vals.end(), vals.begin(), negate< double>()); // 関数オブジェクトを使用する cout << "Negated contents of vals:\n"; p = vals.begin(); while(p != vals.end()) { cout << *p << " "; p++; } return 0; }
// 二項関数オブジェクトを使用する #include < iostream> #include < list> #include < functional> #include < algorithm> using namespace std; int main() { list< double> vals; list< double> divisors; int i; // リストに値を入れる for(i=10; i<100; i+=10) vals.push_back((double)i); for(i=1; i<10; i++) divisors.push_back(3.0); cout << "Original contents of vals:\n"; list< double>::iterator p = vals.begin(); while(p != vals.end()) { cout << *p << " "; p++; } cout << endl; // valsを変換する p = transform(vals.begin(), vals.end(), divisors.begin(), vals.begin(), divides< double>()); // 関数オブジェクトを使用する cout << "Divided contents of vals:\n"; p = vals.begin(); while(p != vals.end()) { cout << *p << " "; p++; } return 0; }