一、vectorとは?
ベクター(Vector)は、動的サイズの配列をカプセル化したシーケンスコンテナです。他の任意のタイプのコンテナと同様に、さまざまなタイプのオブジェクトを格納できます。簡単に言えば、ベクターは任意のタイプを格納できる動的配列です。
二、コンテナの特性
1. 順序シーケンス
シーケンスコンテナ内の要素は、厳密な線形順序で並べられています。シーケンス内の要素の位置を介して対応する要素にアクセスできます。
2. 動的配列
シーケンス内の任意の要素に高速で直接アクセスでき、ポインタ演算によってもアクセスできます。シーケンスの末尾に要素を比較的すばやく追加/削除する操作を提供します。
3. アロケータ対応(Allocator-aware)
コンテナはメモリアロケータオブジェクトを使用して、そのストレージ要件を動的に処理します。
三、基本関数の実装
1. コンストラクタ- vector(): 空のvectorを作成する
- vector(int nSize): 要素数がnSizeのvectorを作成する
- vector(int nSize, const t& t): 要素数がnSizeで、値がすべてtであるvectorを作成する
- vector(const vector&): コピーコンストラクタ
- vector(begin, end): [begin, end) 区間にある別の配列の要素をvectorにコピーする
2. 追加関数
- void push_back(const T& x): ベクターの末尾に要素Xを追加する
- iterator insert(iterator it, const T& x): ベクター内のイテレータが指す要素の前に要素xを追加する
- iterator insert(iterator it, int n, const T& x): ベクター内のイテレータが指す要素の前に同じ要素xをn個追加する
- iterator insert(iterator it, const_iterator first, const_iterator last): ベクター内のイテレータが指す要素の前に、同じ型の別のベクターの [first, last) のデータを挿入する
3. 削除関数
- iterator erase(iterator it): ベクター内でイテレータが指す要素を削除する
- iterator erase(iterator first, iterator last): ベクター内の [first, last) の要素を削除する
- void pop_back(): ベクターの最後の要素を削除する
- void clear(): ベクター内のすべての要素をクリアする
4. 走査関数
- reference at(int pos): pos位置にある要素の参照を返す
- reference front(): 先頭要素の参照を返す
- reference back(): 末尾要素の参照を返す
- iterator begin(): ベクターの先頭ポインタを返す。最初の要素を指す
- iterator end(): ベクターの末尾ポインタを返す。ベクターの最後の要素の次の位置を指す
- reverse_iterator rbegin(): 逆イテレータ。最後の要素を指す
- reverse_iterator rend(): 逆イテレータ。最初の要素の前の位置を指す
5. 判定関数
- bool empty() const: ベクターが空かどうかを判定する。空の場合、ベクターには要素がない
6. サイズ関数
- int size() const: ベクター内の要素数を返す
- int capacity() const: 現在のベクターが収容できる最大要素数を返す
- int max_size() const: 許容されるvectorの最大要素数を返す
7. その他の関数
- void swap(vector&): 同じ型の2つのベクターのデータを交換する
- void assign(int n, const T& x): ベクターの先頭からn個の要素の値をxに設定する
- void assign(const_iterator first, const_iterator last): ベクター内の [first, last) の要素を現在のベクターの内容に設定する
8. 一目でわかる
1. push_back 配列の最後にデータを1つ追加する
2. pop_back 配列の最後のデータを削除する
3. at 番号位置のデータを取得する
4. begin 配列の先頭のポインタを取得する
5. end 配列の最後の要素+1のポインタを取得する
6. front 配列の先頭の参照を取得する
7. back 配列の最後の要素の参照を取得する
8. max_size vectorの最大サイズを取得する
9. capacity 現在のvectorに割り当てられたサイズ
10. size 現在使用しているデータのサイズ
11. resize 現在使用しているデータのサイズを変更する。現在の使用量より大きい場合はデフォルト値を埋める
12. reserve 現在のvecotrに割り当てられた空間のサイズを変更する
13. erase ポインタが指すデータ項目を削除する
14. clear 現在のvectorを空にする
15. rbegin vectorを反転した後の開始ポインタを返す(実際には元のend-1)
16. rend vectorを反転した後の終了ポインタを返す(実際には元のbegin-1)
17. empty vectorが空かどうかを判定する
18. swap 別のvectorとデータを交換する
四、基本的な使い方
#include < vector> using namespace std;
五、簡単な紹介
- Vector<型>識別子
- Vector<型>識別子(最大容量)
- Vector<型>識別子(最大容量, 初期値)
- Int i[5]={1,2,3,4,5}
Vector<型>vi(I,i+2);// iインデックス値が3以降の値を取得する - Vector< vector< int> >v; 2次元ベクター // ここで一番外側の<>にはスペースが必要。そうしないと古いコンパイラでは通らない
例
1. pop_back() & push_back(elem) の例:コンテナの末尾でデータを削除・挿入する
例
出力結果:
0,1,2,3,4,5,6,7,8,9, 0,1,2,3,4,
2. clear() でコンテナ内のすべてのデータをクリアする
例
出力結果:
0,1,2,3,4,5,6,7,8,9,
3. ソート
例
出力結果:
从小到大: 0,1,3, 从大到小: 3,1,0,
1.sort にはヘッダーファイルが必要なことに注意#include <algorithm>
2.sort で降順にしたい場合は、sort を書き直せばよい
bool compare(int a,int b)
{
return a< b; //升序排列,如果改为return a>b,则为降序
}
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<< a[i]<< endl;
sort(a,a+20,compare);
4. アクセス(直接配列アクセス & イテレータアクセス)
例
出力結果:
直接利用数组:0 1 2 3 4 5 6 7 8 9 利用迭代器:0 1 2 3 4 5 6 7 8 9
5. 2次元配列の2つの定義方法(結果は同じ)
方法1
方法2
出力結果:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
原文アドレス:http://blog.csdn.net/w_linux/article/details/71600574