「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

関連項目