構造図#
set(集合)#
内部で自動的に順序が付けられ、重複要素を含まない コンテナ
#include <set>
set<int> name;
set<double> name;
set<char> name;
set<struct node> name;
set<set<int> > name;//注意:> >の間にスペースを入れる
set<int> arr[10];
set コンテナ内の要素のアクセス#
set はイテレータ (iterator) を使用してのみアクセスできます(vector や string 以外の STL コンテナは *(it+i) のアクセス方法をサポートしていません) :
set<int>::iterator it;
set<char>::iterator it;
for (set<int>::iterator it = st.begin(); it != st.end(); it++)
{
cout << *it << endl;
}
よく使われる関数#
insert(value)#
st.insert('C');
find(value)#
find (value) は、set 内の value に対応するイテレータを返します。つまり、value のポインタ(アドレス)です
cout << *(st.find(2)) << endl;
erase(it)#
st.erase(st.find(100)); //find()関数で100を見つけ、eraseで削除する
erase(iteratorBegin , iteratorEnd)#
左閉右開
st.erase(it, st.end());
size()#
cout << st.size() << endl;
vector(ベクトル)#
可変長配列
#include <vector>
vector<int> name;
vector<double> name;
vector<char> name;
vector<struct node> name;
vector<vector<int> > name;//注意:> >の間にスペースを入れる
vector<int> array[SZIE]; //2次元可変長配列
2 次元配列では、1 次元形式はアドレスです。例:
int arr[3][2];//3行2列のアドレスを定義する
cout<<arr[0]<<endl; //arrの1行目のアドレスを出力する
output:
0x61fe00 //arrの1行目のアドレス
vector コンテナ内の要素のアクセス#
(1)インデックスを使用してアクセスする
cout<<vi[0]<<endl;
(2)イテレータを使用してアクセスする
イテレータ(iterator)はポインタと考えることができます
vector<型名>::iterator 変数名;
vector<int>::iterator it;
vector<double>::iterator it;
vector<int>::iterator it=v.begin();
for (int i = 0; i < v.size(); i++)
{
cout<<it[i]<<" ";
}
vector<int>::iterator it=v.begin();
for (int i = 0; i < v.size(); i++)
{
cout<<*(it+i)<<" ";
}
//vectorのイテレータはit<v.end()の書き方をサポートしていないため、ループ条件はit!=v.end()のみです
for (vector<int>::iterator it=v.begin(); it!=v.end();it++)
{
cout<<*it<<" ";
}
vector のよく使われる関数の例#
(1)push_back(item)#
v.push_back(i);
(2)void pop_back()#
v.push_back(i);
(3)size()#
cout<<v.size()<<endl;
(4)clear()#
v.clear();
(5)insert()#
insert(__position,__x);
v.insert(v.begin()+2,-1); //v[2]の位置に-1を挿入する
(6)erase () 左閉右開#
erase(__position); //要素を1つ削除する
v.erase(v.begin()+3);
erase(__positionBegin,__positionEnd);//範囲内の要素を削除する
v.erase(v.begin()+1,v.begin()+4);