vector クラス

[機能]

  動的配列を保持します.C の配列と互換性を持ち,データ領域の連続性が保証されています.通常の動的配列の場合は,宣言時に大きさを宣言しなければなりませんが,vector の場合は必要ありません.また,要素数を途中で変更することも可能です.なお,以下に示す関数において,一般に,insert,push_back よりも,emplace,emplace_back を使ったほうが処理効率は良くなります.
template <class T, class Allocator = allocator<T>> class vector		

[使用方法]
#include <vector>
using namespace std;
vector <T> 変数名;
   vector<int> x;   // 空の vector
   vector<int> x(3);   // 要素数が 3
   vector<int> x(5, 10);   // 5 つの要素を 10 で初期化
   vector<int> x(y.it1, y.it2);   // it1 から it2 の範囲で初期化
   vector<int> x(y);   // vector y で初期化
   vector<int> x ({1, 2, 3});   // 初期化子リスト,C++11
   vector<int> x {1, 2, 3};   // 初期化子リスト,C++11
   vector<int> x = {1, 2, 3};   // 初期化子リスト,C++11		
[メンバー関数等]

[演算子の多重定義]
=  ==  <  <=  !=  >  >=  []		

[使用例]

  1. vector の使用方法です.以下に示すプログラム例において,いくつかのコメント部分は,その上または下に記述された方法とほぼ同等なものであることを示しています(複数行の対応関係である場合もある).
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void print(string str, vector<int> &v) {
    	if (v.empty())
    		cout << "  コンテナ " << str <<" は空です\n";
    	else {
    		cout << str << " の要素数: " << v.size() << endl;
    		vector<int>::iterator it;
    		for (it = v.begin(); it != v.end(); it++)
    			cout << "  " << *it;
    		cout << endl;
    	}
    }
    
    int main()
    {
    					// 要素を最後に追加(サイズは自動的に増加)
    	cout << "**初期設定**\n";
    	vector<int> v1 = {0, 1, 2, 3, 4};
    	print("v1", v1);
    					// 配列と同様の参照も可能
    	cout << "**参照**\n";
    	for (int i1 = 0; i1 < 5; i1++)
    		cout << "  " << v1[i1];
    //		cout << "  " << v1.at(i1);
    	cout << endl;
    					// 2 番目の要素の前に要素を追加
    	cout << "**2 番目の要素の前に要素を追加**\n";
    	vector<int>::iterator it = v1.begin();
    	it++;
    	v1.insert(it, 5);
    	print("v1", v1);
    					// 3 番目の要素と最後の要素を削除
    	cout << "**3 番目の要素と最後の要素を削除**\n";
    	it = v1.begin();
    	it++;
    	it++;
    	v1.erase(it);
    	v1.pop_back();
    	print("v1", v1);
    					// 演算子で比較
    	cout << "**比較**\n";
    	vector<int> v2;
    	for(int i1 = 0; i1 < 4; i1++)
    		v2.push_back(i1);
    	v2.at(1) = 5;   // 要素 1 の値を変更
    	print("v2", v2);
    	if (v1 == v2)
    		printf("  2 つのコンテナ内の要素はすべて等しい\n");
    					// v2 の最初の 3 つの要素を v1 に代入
    	cout << "**v2 の最初の 3 つの要素を v1 に代入**\n";
    	v1.assign(v2.begin(), v2.end()-1);
    	print("v1", v1);
    					// v1 と v2 を入れ替える
    	cout << "**v1 と v2 を入れ替える**\n";
    	print("入れ替え前:v1", v1);
    	print("入れ替え前:v2", v2);
    	v1.swap(v2);
    	print("v1", v1);
    	print("v2", v2);
    					// v1 のすべての要素を削除
    	cout << "**v1 のすべての要素を削除**\n";
    	v1.clear();
    	print("v1", v1);
    
    	return 0;
    }
    			
    (出力)
    **初期設定**
    v1 の要素数: 5
      0  1  2  3  4
      0  1  2  3  4
    **2 番目の要素の前に要素を追加**
    v1 の要素数: 6
      0  5  1  2  3  4
    **3 番目の要素と最後の要素を削除**
    v1 の要素数: 4
      0  5  2  3
    **比較**
    v2 の要素数: 4
      0  5  2  3
      2 つのコンテナ内の要素はすべて等しい
    **v2 の最初の 3 つの要素を v1 に代入**
    v1 の要素数: 3
      0  5  2
    **v1 と v2 を入れ替える**
    入れ替え前:v1 の要素数: 3
      0  5  2
    入れ替え前:v2 の要素数: 4
      0  5  2  3
    v1 の要素数: 4
      0  5  2  3
    v2 の要素数: 3
      0  5  2
    **v1 のすべての要素を削除**
      コンテナ v1 は空です
    			
[参照]

dequesetmultimaparraylistmapmultisetpriority_queuequeuestackforward_listunordered_mapunordered_multimapunordered_setunordered_multiset

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引