「std::vector」の版間の差分

提供: C++入門
移動: 案内検索
(インタフェース)
行83: 行83:
 
| [[std::vector::operator[]|operator[]]]
 
| [[std::vector::operator[]|operator[]]]
 
| [[std::vector]] の n 番目の要素の参照を返します。[[std::vector::operator[]|operator[]]]は、境界チェックをしません。
 
| [[std::vector]] の n 番目の要素の参照を返します。[[std::vector::operator[]|operator[]]]は、境界チェックをしません。
 +
|-
 +
| [[std::vector::shrink_to_fit]]
 +
| [[C++11]]で追加された、コンテナサイズを領域に合わせます。メモリの解放に利用します。
 
|-
 
|-
 
| [[std::vector::|:vector::]]
 
| [[std::vector::|:vector::]]

2013年12月28日 (土) 18:36時点における版

std::vector は、C++ライブラリ で提供されるテンプレートを利用した動的な配列です。

読み方

std::vector
えすてぃーでぃー べくたー

概要

C++ の配列は、サイズをプログラマが管理しますが、std::vector は、配列のサイズを意識せずに、プログラミングできます。 STLに含まれるvectorなどのデータを管理するテンプレートクラスをコンテナと呼びます。

インタフェース

std::vector
メンバ 意味
constructor vectorのコンストラクタ。vectorを初期化します。
destrctor デストラクタ
operator= operator=
reserve std::vecotrのキャパシティを予約します。
capacity 割り当てられているストレージキャパシティのサイズを返します。
size サイズを返します。
max_size 最大サイズを返します。
resize サイズをリサイズします。
shrink_to_fit コンテナのキャパティにフィットしたサイズまで縮小します。
push_back std::vector の最後に新しい要素を追加します。要素は、コピー、もしくは、move されます。
pop_back std::vector の最後の要素を取り除きます。コンテナのサイズが1つ小さくなります。
insert std::vector に新しい要素を追加します。
erase std::vector の1つの要素、または、要素のレンジを削除します。
clear std::vector の要素をすべて削除します。
empty std::vector が空であれば、trueを返し、そうでなければ、falseです。
begin std::vector の最初の要素のイテレータを返します。
end std::vector の最後の要素の次のイテレータを返します。
front std::vector の最初の要素の参照を返します。
back std::vector の最後の要素の参照を返します。
at std::vector の n 番目の要素の参照を返します。無効な要素にアクセスしたとき、std::out_of_range の例外を送出します。operator[]は、境界チェックをしません。
operator[] std::vector の n 番目の要素の参照を返します。operator[]は、境界チェックをしません。
std::vector::shrink_to_fit C++11で追加された、コンテナサイズを領域に合わせます。メモリの解放に利用します。
:vector::

サンプルコード

auto1.cpp

C++11forautoを併用すると簡単に書けます。

#include <iostream>
#include <vector>
using namespace std;
 
int
main(int argc, char const* argv[])
{
        std::vector<int> v;
        v.push_back (1);
        v.push_back (2);
        v.push_back (3);
        for (auto x: v) {
                cout << x << endl;
        }
        return 0;
}

auto2.cpp

C++11では、コンテナの初期化(std::initializer_list)もできます。

#include <iostream>
#include <vector>
using namespace std;
 
int
main(int argc, char const* argv[])
{
        std::vector<int> v{1,2,3};
        for (auto x: v) {
                cout << x << endl;
        }
        return 0;
}

vectorの使用例

vectorを連結する例

std::vectorは、v1+=v2;やv0=v1+v2;といった連結ができません。 std::vectorの連結は、std::vector::insertを利用して、実現できます。

ソースコード vector_add_vector1.cpp

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char const* argv[])
{
        vector<int> v1{1,2,3}, v2{4,5,6};
        v1.insert(v1.end(), v2.begin(), v2.end());
        for(auto i: v1) {
                cout << i << " ";
        }
        cout << endl;
        return 0;
}

コンパイル

g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \
-Wl,-rpath=/usr/local/lib/gcc49  vector_add_vector1.cpp -o vector_add_vector1

実行例

% ./vector_add_vector1
1 2 3 4 5 6

vecotrをソートする

std::vectorをソート(sort)するには、std::sortを利用します。 vectorをソートしたり、構造体のvectorをソートできます。 詳細については、std::sortをご参照ください。

関連項目