Vectorの使い方
整理中
このページはTopCoder?のC++選択者が使うSTLをメモしたものです。
通常のSTLの使い方とは異なることがあるので注意が必要です。その違いは、TopCoder?で求められる第一のものがコーディング速度だということによります。
vector †
operator[]
[pos]
at
at(pos)
assign
assign(count, val) assign(first, last)
一度内容をすべて消してから、新しいデータを格納します。
clear
clear()
erase
erase(where) erase(first, last)
どちらもイテレータで指定します。インデックスで消したいときは、
erase(begin() + pos)
で消せます。
begin
begin()
end
end()
push_back
push_back(val)
pop_back
pop_back()
size
size()
insert
insert(where,val) insert(where,count,val) insert(where,first,last)
挿入はメモリの大移動が起こるので、あまり使われません。
whereで指定された場所に新しいデータが入ります。whereで指定された場所にあったデータは後ろに移ります。
back,capacity,front,get_allocator,max_size,rbegin,rend,resize,reserve,swap
使用頻度が低いので省略
algorithm †
vectorと一緒によく使われるもの。
find(first,last,val)
sort(first,last)
ソート系にはpartial_sort,stable_sortもありますが、使う機会はほとんどありません。でも、stable_sortでないと同じものの順序が保存されないことは知っておく必要があります。最大と最小だけが必要なことは多いかもしれませんが、それはmax_element,min_elementで済みます。
max_element(first,last)
min_element(first,last)
イテレータを返すので、値が必要なら*max_element(...)。
unique(first,last)
remove(first,last,val)
unique,removeは並び替えだけで削除を行わないので、eraseと一緒に使うことが多いです。
ソートして重複を削除する
sort(vec.begin(), vec.end()) vec.erase(unique(vec.begin(), vec.end()), vec.end());
特定の値を持つ要素の消去
vec.erase(remove(vec.begin(), vec.end(), val), vel.end());