STLをいろいろ使ってみようと思います 第1回 vector(1)
第一回はvectorを取り上げたいと思います。
まずは基本的な使い方。
#include <iostream> #include <vector> int main() { std::vector<int> v; v.push_back(1); // push_backで要素を末尾に追加 v.push_back(2); v.push_back(3); std::cout << std::endl << "イテレータでアクセス" << std::endl; for(std::vector<int>::iterator it = v.begin(); // イテレータで要素にアクセス可能 begin()は先頭要素を指すイテレータを返す it != v.end(); ++it) // end()は最後尾の次を指すイテレータを返す イテレータをインクリメントすると今指しているようその次を指す std::cout << *it << std::endl; // イテレータに*をつけると指している要素を得られる v.pop_back(); // pop_backで最後の要素を削除する std::cout << std::endl << "at()でアクセス" << std::endl; for(size_t i = 0; i < v.size(); ++i) std::cout << v.at(i) << std::endl; // at(i)でもアクセス可能 std::cout << std::endl; // 状態を知る std::cout << "v.size() " << v.size() << std::endl; // 要素数 std::cout << "v.max_size() " << v.max_size() << std::endl; // 確保可能な要素数 std::cout << "v.capacity() " << v.capacity() << std::endl; // すでに確保された領域の大きさ std::cout << "v.empty() " << v.empty() << std::endl; // 空っぽかどうか std::cout << std::endl; // front / back std::cout << "v.front() " << v.front() << std::endl; // 最初の要素 std::cout << "v.back() " << v.back() << std::endl; // 最後の要素 // at()やoperator[]やfrontやbackで得られるのは要素の参照なので代入とかすると変更できる。 v.at(1) = 11; int& f = v.front(); f = 100; std::cout << std::endl << "[]でアクセス" << std::endl; for(int i = 0; i < v.size(); ++i) std::cout << v[i] << std::endl; // insert()で要素を挿入 v.insert(v.begin() + 1, 99); // v.begin()の後ろに99を挿入する v.insert(v.begin() + 1, 2, 888); // v.begin()の後ろに888を2個挿入する v.insert(v.end(), v.begin(), v.end()); // v.end()の位置にv.begin()からv.end()の一個前までを挿入する std::cout << std::endl << "挿入後" << std::endl; for(std::vector<int>::iterator it = v.begin(); // イテレータで要素にアクセス可能 begin()は先頭要素を指すイテレータを返す it != v.end(); ++it) // end()は最後尾の次を指すイテレータを返す イテレータをインクリメントすると今指しているようその次を指す std::cout << *it << std::endl; // イテレータに*をつけると指している要素を得られる return 0; }
結果
イテレータでアクセス 1 2 3 at()でアクセス 1 2 v.size() 2 v.max_size() 1073741823 v.capacity() 4 v.empty() 0 v.front() 1 v.back() 2 []でアクセス 100 11 挿入後 100 888 888 99 11 100 888 888 99 11
とりあえず一回目はこのくらいで終わります。