cppreference.com -> C++ ベクタ -> 詳細

C++ ベクタ


コンストラクタ

文法:

  vector();
  vector( size_type size );
  vector( size_type num, const TYPE &val );
  vector( const vector &from );
  vector( input_iterator start, input_iterator end );

C++ ベクタは以下のいずれかの引数を伴って構築される:

例えば、以下の例は整数 42 の 5 つの複製を保持するベクタを構築する。
vector<int> v1( 5, 42 );
  


演算子

文法:

  v1 == v2
  v1 != v2
  v1 <= v2
  v1 >= v2
  v1 < v2
  v1 > v2 
  v[]

C++ ベクタは標準演算子 ==, !=, <=, >=, <, と > によって比較できる。 ベクタの個々の要素は [] 演算子によって調べられる。

二つのベクタは等しくなる条件は次の通り。

  1. サイズが同じ、かつ
  2. 各要素に対して、一方のベクタの位置 I にある要素が、他方のベクタの位置 I にある要素に等しい。
ベクタ間の比較は辞書順で行われる。

関連項
at().

assign

文法:

  void assign( input_iterator start, input_iterator end );
  void assign( size_type num, const TYPE &val );

assign() 関数はベクタに対して start から end までの値、 もしくは valnum 個の複製を与える。 この関数は、ベクタの以前の内容を破壊する。


at

文法:

  TYPE at( size_type pos );

at() 関数は、ベクタの位置 pos にある要素への参照を返す。 位置 pos が有効な範囲外にあるときは out_of_range 例外を送出する。 at() 関数は [] 演算子よりも安全である、 なぜならそれはベクタ境界の外部にある項目を参照することがないためだ。 例えば、以下のコードを考える:

vector<int> v( 5, 1 );

for( int i = 0; i < 10; i++ ) {
  cout << "Element " << i << " is " << v[i] << endl;
}
  

このコードはベクタ末尾を超過し、潜在的に危険な結果をもたらす。 以下のコードは遙かに安全であろう:

vector<int> v( 5, 1 );

for( int i = 0; i < 10; i++ ) {
  cout << "Element " << i << " is " << v.at(i) << endl;
}
  

メモリから無意味な値を読み出そうと試みる代わりに、 at() 関数はベクタを超過していることを理解して例外を送出するだろう。

関連項:
[] 演算子

back

文法:

  TYPE back();

back() 関数はベクタの最終要素への参照を返す。例:

vector<int> v;

for( int i = 0; i < 5; i++ ) {
  v.push_back(i);
}

cout << "The first element is " << v.front() 
     << " and the last element is " << v.back() << endl;
  

このコードは以下の出力を生成する:

The first element is 0 and the last element is 4
  
関連項:
front().

begin

文法:

  iterator begin();

begin() 関数はベクタの先頭を指す イテレータ を返す。 例えば、次のコードはイテレータを用いてベクタ中の全要素を表示している:

vector<int> v1( 5, 789 );
vector<int>::iterator it;
for( it = v1.begin(); it != v1.end(); it++ )
  cout << *it << endl;
関連項:
end().

capacity

文法:

  size_type capacity();

capacity() 関数はベクタが記憶域を確保し直す必要なしに保持できる要素数を返す。


clear

文法:

  void clear();

clear() 関数はベクタの全要素を削除する。


empty

文法:

  bool empty();

empty() 関数はベクタが要素を持っていないときに true を返し、 そうでないときに false を返す。 例えば、以下のコードは与えられたベクタをクリアし、その内容を逆順で表示する:

vector<int> v;

for( int i = 0; i < 5; i++ ) {
  v.push_back(i);
}

while( !v.empty() ) {
  cout << v.back() << endl;
  v.pop_back();
}
  
関連項:
size()

end

文法:

  iterator end();

end() 関数はベクタの末尾を指す イテレータ を返す。 ベクタの最終要素にアクセスするは、イテレータをデクリメントする必要があることに注意。

関連項:
begin()

erase

文法:

  iterator erase( iterator pos );
  iterator erase( iterator start, iterator end );

erase() 関数は位置 pos にある要素、 もしくは startend の間にある要素を削除する。 戻り値は、削除された最終要素の直後を指す イテレータ である。 例:

// ベクタを作成し、アルファベットの先頭 10 文字を読み込む。
vector<char> alphaVector;
for( int i=0; i < 10; i++ )
  alphaVector.push_back( i + 65 );

int size = alphaVector.size();
vector<char>::iterator startIterator;
vector<char>::iterator tempIterator;

for( int i=0; i < size; i++ ) {
  startIterator = alphaVector.begin();
  alphaVector.erase( startIterator );

  // ベクタを表示する
  for( tempIterator = alphaVector.begin(); tempIterator != alphaVector.end(); tempIterator++ )
    cout << *tempIterator;
  cout << endl;
}

このコードは以下の出力を表示する:

BCDEFGHIJ
CDEFGHIJ
DEFGHIJ
EFGHIJ
FGHIJ
GHIJ
HIJ
IJ
J
関連項:
pop_back().

front

文法:

  TYPE front();

front() 関数はベクタの先頭要素への参照を返す。

関連項:
back().

get_allocator

文法:

  allocator_type get_allocator();

get_allocator() 関数はベクタのアロケータを返す。


insert

文法:

  iterator insert( iterator pos, const TYPE &val );
  void insert( iterator pos, size_type num, const TYPE &val );
  void insert( iterator pos, input_iterator start, input_iterator end );

insert() 関数は以下のいずれかの動作を行う:

例:

// ベクタを作成し、アルファベットの先頭 10 文字を読み込む。
vector<char> alphaVector;
for( int i=0; i < 10; i++ )
  alphaVector.push_back( i + 65 );

// ベクタに 4 つの C を挿入する
vector<char>::iterator theIterator = alphaVector.begin();
alphaVector.insert( theIterator, 4, 'C' );

// ベクタを表示する
for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); theIterator++ )
  cout << *theIterator;

このコードは以下の出力を表示する:

CCCCABCDEFGHIJ

max_size

文法:

  size_type max_size();

max_size() 関数はベクタが保持できる最大要素数を返す。


pop_back

文法:

  void pop_back();

pop_back() 関数はベクタの最終要素を削除する。例:

vector<char> alphaVector;
for( int i=0; i < 10; i++ )
  alphaVector.push_back( i + 65 );

int size = alphaVector.size();
vector<char>::iterator theIterator;
for( int i=0; i < size; i++ ) {
  alphaVector.pop_back();
  for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); theIterator++ )
    cout << *theIterator;
  cout << endl;
}

このコードは以下の出力を表示する:

ABCDEFGHI
ABCDEFGH
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AB
A
関連項:
erase().

push_back

文法:

  void push_back( const TYPE &val );

push_back() 関数は val をベクタの末尾に追加する。


rbegin

文法:

  reverse_iterator rbegin();

rbegin() 関数はベクタ末尾を指すリバースイテレータ を返す。


rend

文法:

  reverse_iterator rend();

rend() はベクタ先頭を指すリバースイテレータ を返す。


reserve

文法:

  void reserve( size_type size );

reserve() 関数はベクタが最小でも size 個の要素を保持できるようにする。


resize

文法:

  void resize( size_type size, TYPE val );

resize() 関数はベクタのサイズを size に変更し、 新規に追加された項目を val に設定する。


size

文法:

  size_type size();

size() 関数はベクタ中の要素数を返す。

関連項:
empty()

swap

文法:

  void swap( vector &from );

swap() 関数はベクタの要素を from の要素と交換する。