1.標准庫vector類型
vector 是同一種類型的對象的集合,每個對象都有一個對應的整數索引值。標准庫將負責管理與存儲元素相關的內存。我們把 vector 稱為容器,是因為它可以包含其他對象。一個容器中的所有對象都必須是同一種類型的。
用 vector之前,必須包含相應的頭文件。
#include <vector>
1
using std::vector;
vector 是一個類模板(class template)。使用模板可以編寫一個類定義或函數定義,而用於多個不同的數據類型。因此,我們可以定義保存 string 對象的 vector,或保存 int 值的 vector,又或是保存自定義的類類型對象vector。使用類模板時只需要簡單了解類模板是如何定義的就可以了。聲明從類模板產生的某種類型的對象,需要提供附加信息,信息的種類取決於模板。以 vector 為例,必須說明 vector 保存何種對象的類型,通過將類型放在類模板名稱后面的尖括號中來指定類型:
vector<int> ivec; // ivec holdsobjects of type int
vector<Sales_item> Sales_vec; //holds Sales_items
1
2
注意:和其他變量定義一樣(作為定義變量看待,如 int a;float b;),定義 vector 對象要指定類型和一個變量的列表。上面的第一個定義,類型是vector(相當於int,或double),該類型即是含有若干 int 類型對象的 vector,變量名為 ivec(相當於a,b)。第二個定義的變量名是 Sales_vec,它所保存的元素 是 Sales_item 類型的對象。即,
定義方法為:vector<類型> 名稱
vector<類型> :作為一個整體,是類型,相當於int,float。
名稱 相當於變量的名字,a,b。
則以下幾種都是成立的
vector<int> k;//向量
vector<int*>kk;//int指針的向量,以后再詳細斟酌
vector<int>*kkk;//vector向量指針
vector<int*>*kkkk;//int指針的向量指針(對比int*p理解,指針變量前面的“*”表示該變量的類型為指針變量,p是指針變量名,而不是*p)
vector 不是一種數據類型,而只是一個類模板,可用來定義任意多種數據類型。vector 類型的每一種都指定了其保存元素的類型。因此,vector<int> 和 vector<string> 都是數據類型。
2.Vector向量幾種情況的總結
**1) vector<int>k;//向量**
1
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> k;
for (int j = 0; j<12; j++)
{
k.push_back(j);//向kk中追加值
}
for (int j = 0; j<12; j++)
{
cout <<k[j] << " ";
}
system("pause");
return 0;
}
**2)vector <vector> kk;//int指針的向量**
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int*> k;
int *p = new int[15];
for (int j = 0; j<15; j++)
{
p[j] = j;
k.push_back(&p[j]);
}
for (int i = 0; i < 15;i++)
{
cout << *k[i]<< " ";//因為向量容器里面都是int型的指針變量,
} //所以值都是指針,所以需要間接訪問運算符*
delete[]p;
system("pause");
return 0;
}
**3) vector<int> *kkk;//vector向量指針**
1
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> *k;//vector向量指針
k = new vector<int>[5];
//相當於int *p = new int[5];即vector<int> *kkk=new vector<int>[5];
for (int i = 0; i<5; i++)
{
for (int j = 0; j<10; j++)
{
k[i].push_back(j);//像向量指針中追加值
}
}
for (int i = 0; i<5; i++)
{
for (int j = 0; j < k[i].size(); j++)
cout << k[i][j] << " ";
cout << endl;
}
delete[] k;
system("pause");
}
**4)vector<int*> *kkkk;//int指針的向量指針**
[cpp] view plain copy
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int*> *k;//int指針的向量指針
k = new vector<int*>[5];
int *p = new int[10];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 10; j++)
{
p[j] = j;
k[i].push_back(&p[j]);
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 10; j++)
{
cout<<*k[i][j]<<" ";
}
cout << endl;
}
delete[]p;
delete[]k;
system("pause");
}