C言語では1は、独自の実装および実現を作るために多くのことはよくないエラーが発生しやすい、そして書くためのいくつかの複雑な操作は非常に面倒で、そのため、C ++カプセル化する標準テンプレートライブラリ(標準TemplateLibrary)、を提供してくれます多くの実用的なコンテナので、我々は彼らの詳細を達成するための努力を必要とせず、直接これらのコンテナで、HashMapのこれらの容器、例えば、リストのコレクションで、簡単に様々なJavaのに似ている、機能の多くを達成するための関数を呼び出すことができます我々はまた、データを操作することが容易となります
2.はじめに以下は一般的な使用のベクトルであります
①ベクトルは、実際には配列の長さであるデータの長さである、変更することができます良い解決策である、我々はどのくらいの配列の長さ別の心配を開く状況の確認はありませんでした、このベクターは、直接宣言することができます
類似したJavaのセットが、言語が異なりますが、機能が本当に好きで、あなたは隣接行列を使用することを恐れてはいけないことができますので、我々は、店舗のマップにテーブルに隣接する形で、ベクターを使用する方法の発現をリストポインタは、読者の隣接リストは非常に友好的である達成します
②あなたは私たちが<ベクトル>を#includeし、ベクトルのヘッダーファイルを追加する必要があり、ベクターを使用する必要がある場合は、ほかにも、あなたが名前空間stdを使用して、次のヘッダーファイルを追加する必要があります。このコードは、私たちは、ベクターを使用することができます
③ベクトルが定義されています
単一のベクトル定義:ベクトル<型名>名前を;
この定義は、実際には一次元配列名[サイズ]を定義しているが、このサイズは、型名は、任意の基本的なタイプであってもよい状況特異的な変化、より省スペース、例えばint型、ダブル、チャー、構造等に応じてすることができ標準STLコンテナ、例えばベクター、集合、キュー、などであってもよいので、標準C ++ 11の前に、>>記号の間の空間によって画定される時に必要なときに型名のSTLが容易である場合がありますコンパイラがエラーでシフト操作の結果としてそれを扱います、ここでいくつかの簡単な例を示します。
vector<int> name;
vector<double> name;
vector<char> name;
vector<node> name;
vectot<vector<int> > name;
これは、ベクトル配列として定義することができます。
vector<typename> arrayName[arraysize];
例如:
vector<int> vi[100];
[]内のこのようなarrayNameの各要素がベクトルである2次元アレイが理解アレイの二次元の辺の長さとすることができるように、初心者は、二次元ベクトルとすることができます
ベクター④コンテナエレメントへのアクセス:ベクターアクセス二つの方法があるが、一つの主題によってアクセスされる、他のイテレータの方法を介してアクセスされます
1)添字によってアクセスすることが
アレイ<型名>コンテナのはviなどのベクターVI、ダイレクトアクセスVI [インデックス]にを定義するための共通のアクセスは、同じである[0]、VI [1]、もちろん、ここで添字1 vi.size() - この範囲外の添字1回の訪問は間違っているだろう
2)反復子がアクセスします
反復がベクトルを定義されているものへのポインタ、と理解することができる<型名> ::それをイテレータ。
このように、それはあなたがイテレータにそれを得ることができるように、我々は*それによって内部のベクトル要素にアクセスすることができ、ベクトル<型名> ::イテレータ変数です
以下は、特定のプログラムです。
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 0; i < 5; ++i){
vi.push_back(i);
}
//vi.begin()表示取vi的首元素地址,而it指向这个地址
vector<int> ::iterator it = vi.begin();
for(int i = 0; i < 5; ++i){
cout << *(it + i) << " ";
}
return 0;
}
vi.begin⑤()関数が取ら最初の要素VIのアドレスである前に、この関数の端があり、次のアドレスが尾エレメントアドレスから取り出され、終了フラグが終了イテレータとして機能することができる要素のいずれかが記憶されていない、以下れます特定のコード:
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 0; i < 5; ++i){
vi.push_back(i);
}
//vi.end()表示取vi的尾元素地址的下一个地址
vector<int> ::iterator it = vi.begin();
for(it; it != vi.end(); it++){
cout << *it << " ";
}
return 0;
}
3. それは、STLコンテナベクトルと列vi.begin()このイテレータ+ 3書かれた整数でのみ使用されてもよいことに留意されたいプラス
以下は、一般的に使用される関数ベクトル解析の例です。
①一back(X):ベクトルを元素Xの後に追加され、時間複雑度はO(1)、次のコードです。
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 0; i <= 3; i++){
vi.push_back(i + 1);
}
for(int i = 0; i < vi.size(); i++){
cout << vi[i] << " ";
}
return 0;
}
②pop_back()
pop_back()関数は、ベクトルの最後の要素を削除するために使用することができ、時間の複雑さはO(1)、以下は、特定のコードです。
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 0; i <= 3; i++){
vi.push_back(i + 1);
}
vi.pop_back();
for(int i = 0; i < vi.size(); i++){
cout << vi[i] << " ";
}
return 0;
}
③サイズの関数は、ベクトルの要素数を取得するために使用されています
④クリア()
次のようにベクトルのすべての要素を消去するには、時間の複雑さは、Nは、ベクトルの要素数であり、O(N)です。
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 0; i <= 3; i++){
vi.push_back(i + 1);
}
vi.clear();
cout << vi.size() << " ";
return 0;
}
⑤挿入機能
INSERTは、(それが、x)は、任意のイテレータそれをベクターに要素xを挿入するために使用され、時間計算量はO(N)
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 0; i <= 3; i++){
vi.push_back(i + 1);
}
//将-1插入到vi[2]的位置
vi.insert(vi.begin() + 2, -1);
for(int i = 0; i < vi.size(); i++){
cout << vi[i] << " ";
}
return 0;
}
⑥消去機能
2つの方法がある:セグメント内のすべての要素を削除し、単一の要素を削除して、時間計算量はO(N)であります
①個々の項目を削除します
ERASE()以下のように、要素でそれをイテレータ削除されます。
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 5; i <= 9; i++){
vi.push_back(i);
}
//删除8这个元素
vi.erase(vi.begin() + 3);
for(int i = 0; i < vi.size(); i++){
cout << vi[i] << " ";
}
return 0;
}
②範囲内のすべての要素を削除
すべて員の消去は(最初に、最後の)次のコードで)[最初、最後に削除されます。
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> vi;
for(int i = 5; i <= 9; i++){
vi.push_back(i);
}
vi.erase(vi.begin() + 1, vi.begin() + 4);
for(int i = 0; i < vi.size(); i++){
cout << vi[i] << " ";
}
return 0;
}
4.ベクトル一般的な用途:
①自体は違反のアレイを用いて行うことができ、不確実性の要素数の場合にうまくスペースを節約することができます
一部のアプリケーションでは、出力データの数が不明であるので、必要な出力の全てのすべてのデータベクトルの出力を格納するために使用することができる、同じ行のいくつかの条件に基づいて、データの一部、空白で区切られた中間データに出力を必要とすることは、その後いずれかで出力されます
②図を格納するための隣接関係テーブルの使用。