C++STL vectorの紹介と使用方法

6620 ワード

vector(ベクトル)
前述の比較分析では、vector内部のデータ構造は動的配列、すなわちシーケンステーブルであるため、vectorはデータへのアクセスが速いという利点があるが、挿入、削除効率が低いという欠点もある.また、動的配列であるため、データサイズの問題を考慮する必要はありません.vectorメモリ領域が不足すると、メモリが自動的に再割り当てされ、新しいメモリ領域にデータがコピーされます.
vectorも最もよく使われるシーケンスコンテナで、配列を完全に置き換えることができ、プログラミング中に多くのエラーを減らすことができます.また、vectorは非常に便利な関数を提供しています.
ヘッダファイル#include
コンストラクタ
std::vector<int> first;              // empty vector of ints
std::vector<int> second (4,100);     // four ints with value 100
std::vector<int> third (second.begin(),second.end());  // iterating through second
std::vector<int> fourth (third);     // a copy of third

STLはテンプレートライブラリを表示するため、すべてのコンテナはテンプレートとして提供され、使用中にコンテナに格納されているデータ型を指定する必要があります.int、float、char、ポインタなどの基本データ型であってもよいし、カスタムstructやclassであってもよい.
反復器(反復器は主にアルゴリズム部分で使用されます)
std::vector<int> first;
std::vector<int>::iterator iter;
std::vector<int>::reverse_iterator riter;

iter = first.begin();   //           
iter = first.end();     //                  ,  first.end()           
riter = first.rbegin();
riter = first.rend();

for (iter = first.begin(); iter != first.end(); iter++)
{
    cout << *iter << endl;
}

for (riter = first.rbegin(); riter != first.rend(); riter++)
{
    cout << *iter << endl;
}


vector容量
vector<int> first = {1, 2, 3, 4};

first.size();   //  vector    ,      
first.max_size();   //      ,vector     ,        
first.resize();     //  vector  ,  ,       
first.empty();     //  vector    ,      true

vectorが空であるか否かを判断するには,できるだけempty関数を用い,size()が0であるか否かで判断すると,呼び出すたびに要素を1回遍歴する必要があり,効率が低い.
要素アクセス
std::vector<int> firs(4, 100);

cout << first[0] << endl;     //          
cout << first.at(0) << endl;  //             ,          ,      vector   
cout << first.front() << endl;   //       (first[0])
cout << first.back() << endl;    //        

データ・メンバーの変更
std::vector<int> first;
std::vector<int> second;
std::vector<int> third;

second.assign(7, 100);    //second    7   ,        100
third.assign(second.begin()+1, second.end()-1); // second          third
for (int i = 0; i < 4; i++)
{
    first.push_back(i);    // vector    (     )
}
int tmp = 0;
tmp = first.pop_back();   //        
std::vector<int>::iterator it;
it = first.insert(first.begin(), second.begin(), second.end());   //    
it = first.insert(first.begin(), 2, 100);  //    100

it = first.erase(first.begin());  //    
it = first.erase(first.begin(), first.begin()+3);  //       

first.swap(second);   //first second  
first.clear();      //  vector
it = first.emplace(first.begin, 100);   //(C++11) 100   vector     ,   insert  ,  insert
it = first.emplace();