「std::vector::erase」の版間の差分
提供: C++入門
(ページの作成:「std::vector::erase とは、std::vectorのコンテナの内容をクリアするメンバ関数です。ただし、メモリサイズが解放されるわけ...」) |
(相違点なし)
|
2013年12月28日 (土) 18:34時点における最新版
std::vector::erase とは、std::vectorのコンテナの内容をクリアするメンバ関数です。ただし、メモリサイズが解放されるわけではないため、shrink_to_fit()が必要になります。
読み方
- std::vector::erase
- えすてぃーでぃー べくたー いれーす
概要
std::vectorは、std::vector::eraseで確保しているメモリサイズを解放してくれるわけではありません。
下記の例では、erase()後のサイズは減少していますが、capacityは、erase()前と変化していません。 vectorを適切なメモリサイズまで減らすには、shrink_to_fit()を使用します。このメンバ関数は、C++11に対応した新しいバージョンのコンパイラ(g++, clang++)が必要なので、注意が必要です
vector_erase1.cpp の例
ソースコード vector_erase1.cpp
コンテナの最初の要素をerase()で削除する例です。 erase()を呼び出すだけだと、サイズは、減少しますが、capacityは、変化しません。
#include <iostream> #include <vector> using namespace std; int main(int argc, char const* argv[]) { vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); cout << "size=" << v.size() << " capacity=" << v.capacity() << endl; v.erase (v.begin() ); cout << "size=" << v.size() << " capacity=" << v.capacity() << endl; v.shrink_to_fit(); cout << "size=" << v.size() << " capacity=" << v.capacity() << endl; return 0; }
コンパイル
g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \ -Wl,-rpath=/usr/local/lib/gcc49 vector_erase1.cpp -o vector_erase1
実行例
% ./vector_erase1 size=3 capacity=4 size=2 capacity=4 size=2 capacity=2