C++STL vectorの紹介と使用方法
vector(ベクトル)
前述の比較分析では、vector内部のデータ構造は動的配列、すなわちシーケンステーブルであるため、vectorはデータへのアクセスが速いという利点があるが、挿入、削除効率が低いという欠点もある.また、動的配列であるため、データサイズの問題を考慮する必要はありません.vectorメモリ領域が不足すると、メモリが自動的に再割り当てされ、新しいメモリ領域にデータがコピーされます.
vectorも最もよく使われるシーケンスコンテナで、配列を完全に置き換えることができ、プログラミング中に多くのエラーを減らすことができます.また、vectorは非常に便利な関数を提供しています.
ヘッダファイル#include
コンストラクタ
STLはテンプレートライブラリを表示するため、すべてのコンテナはテンプレートとして提供され、使用中にコンテナに格納されているデータ型を指定する必要があります.int、float、char、ポインタなどの基本データ型であってもよいし、カスタムstructやclassであってもよい.
反復器(反復器は主にアルゴリズム部分で使用されます)
vector容量
vectorが空であるか否かを判断するには,できるだけempty関数を用い,size()が0であるか否かで判断すると,呼び出すたびに要素を1回遍歴する必要があり,効率が低い.
要素アクセス
データ・メンバーの変更
前述の比較分析では、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();