特別注意:
如果需要表示的向量長度太長,容易導致記憶體洩漏,而且效率會變低;
vector作為函式的引數或返回值是,需要注意它的寫法:
double d(vector&a, vector&b)
#includeusing std::vector;
int main()
1、定義和初始化vector物件2、列表初始化vector物件(1)列表初始化時,內容必須放在花括號裡。
vectorv1; //正確,v1包含了三個字串
vectorv2("a", "a", "a"); //錯誤,必須要用花括號
(2)建立指定數量的元素
可以用vector物件容納元素數量和所有元素的統一值初始化vector物件。
vectorivec(10, -1); //10個int型別元素,每個都被初始化為-1
vectorsvec(10, "hi"); //10個string型別元素,每個都被初始化為"hi"
(3)值初始化
可以只提供vector物件容納的元素數量而略去初始值,如果如果是內建型別中的int和string,則他們分別初始化為0和空。
當使用值初始化時,必須提供其型別,否則無法完成值初始化工作。
vectorivec(10); //10個元素,每個都初始化為0
vectorsvec(10); //10個元素,每個都初始化為空string物件
(4)列表初始化還是元素數量?
某種情況下,初始化的含義依賴初始化時使用的是花括號還是圓括號。
但在特殊情況下,花括號內不能提供列表初始化時,編譯器會嘗試預設值初始化vector物件,將花括號轉換為圓括號。
vectorv1(10); //v1有10個元素,每個值都初始化為0
vectorv2; //v2有1個元素,該元素值為10
vectorv3(10, 1); //v3有10個元素,每個值都初始化為1
vectorv4 //v4有兩個元素,值分別為10和1
//當使用的物件型別為string,結果跟int不一樣
vectorv5; //列表初始化:v5有乙個元素,初始化為"hi"
vectorv6("hi"); //錯誤,不能使用字串字面值構建vector物件
vectorv7; //v7有10個預設初始化的元素,全為空string物件
vectorv8; //v8有10個值為"hi"的元素,列表初始化轉換為預設值初始化
//當進行string列表初始化時,不可以用int初始化strin**7、v8花括號內的int值不能作為元素的初始化物件
//所以編譯器使用了預設初始化
3、向vector物件中新增元素(1)新增元素使用push_back(arge)函式。因為如果只用列表初始化,如果要新增1-999或者更多,需要把所有元素乙個乙個羅列出來會顯得很笨重,所有我們需要建立乙個空vector,再利用成員函式push_back把乙個值當成vector物件的尾元素「壓到(push)」到vector物件的「尾端(back)」。
vectorv1; //建立空vector物件
for(int i = 0;i != 100;i++)
v1.push_back(i); //依次把整數值放到v1尾端,迴圈結束後v1有100個元素,值從0到99
for(int n = 0;n執行結果:
(2)標準輸入的方法:
string word;
vectortext; //建立空vector
while(cin >> word)
(3)以下內容與string插入的操作類似 :
v.insert(v it,const t& x):向量中迭代器指向元素前增加乙個元素x
v.insert(v it,int n,const t& x):向量中迭代器指向元素前增加n個相同的元素x
v.insert(v it,const_v first,const_v last):向量中迭代器指向元素前插入另乙個相同型別向量的[first,last)間的資料除了上面那些操作之外,vector還提供了幾種其他操作,大多數都和string的相關操作類似
v.empty() 如果v不含任何元素,返回真;否則返回假
v.size() 返回v中元素的個數
v[n] 返回v中第n個位置上元素的引用
, >= 與string相同按照字典順序進行比較1、計算vector物件內的索引
例子:計算出輸入的成績當中的成績段個數,以10分為乙個分數段:0-9,10-19以此類推一共11個分數段
vectorscores(11, 0); //11個分數段,全部初始化為0
unsigned grade;
while(cin >> grade) //讀取輸入的成績
實現**如下:
#include #include #include using std::vector;
using std::string;
using std::cin; using std::cout; using std::endl;
int main()
cout << "grades.size = " << grades.size() << endl;
for (auto it : grades)
cout << it << " ";
cout << endl;
cout << "scores.size = " << scores.size() << endl;
for (auto it : scores)
cout << it << " ";
cout << endl;
vectoralt_scores(11, 0);
for (auto it = grades.begin(); it != grades.end(); ++it)
cout << "alt_scores.size = " << alt_scores.size() << endl;
for (auto it = alt_scores.begin(); it != alt_scores.end(); ++it)
cout << *it << " ";
cout << endl;
system("pause");
return 0;
}
執行輸入非數字結束:
C 標準庫vector型別
vector屬於順序容器,所謂順序容器,就是元素的順序與元素的值無關,與元素加入容器的位置相對應。對於vector可以將其理解為可變大小陣列,支援快速隨機訪問,在尾部之外的位置插入刪除可能會比較慢。了解完概念接下來就開始學習它的用法 假設以下 前面都包含vector標頭檔案,幷包含using nam...
c 標準庫型別 vector
一 標準庫型別vector表示物件的集合,物件型別相同,需要 include using namespace std or using std vector 二 定義和初始化vector物件 vectorv1 vectorv2 v1 vectorv2 v1 vectorv3 n,val n個val元...
C 標準庫型別 vector
vector表示物件的集合,其中所有的物件的型別均相同。如果需要使用vector,需要 include using std vector vector name 其中t表示物件的型別,除了基本內建型別外,也可以是string,甚至是vector型別vectorv1 預設初始化 vectorv2 v1...