這是我第一次寫博客,請多指教! vector是一種向量容器,說白了就是可以改變大小的數組。 vector是一個模板類,如果直接這樣會報錯: 1 vector a; //報錯,因為要指定模板。 需要像這樣: 那麼,什麼是 模板 呢? 模板是C++支持參數化多態的工具,使用模板可以使用戶為類或者函數聲明 ...
這是我第一次寫博客,請多指教!
vector是一種向量容器,說白了就是可以改變大小的數組。
vector是一個模板類,如果直接這樣會報錯:
1 vector a; //報錯,因為要指定模板。
需要像這樣:
vector<int> a; ^/*這裡可以改成別的類型,float,long等等……*/
那麼,什麼是 模板 呢?
模板是C++支持參數化多態的工具,使用模板可以使用戶為類或者函數聲明一種一般模式,使得類中的某些數據成員或者成員函數的參數、返回值取得任意類型。
模板是一種對類型進行參數化的工具;
通常有兩種形式:函數模板和類模板;
函數模板針對僅參數類型不同的函數;
類模板針對僅數據成員和成員函數類型不同的類。
使用模板的目的就是能夠讓程式員編寫與類型無關的代碼。比如編寫了一個交換兩個整型int 類型的swap函數,這個函數就只能實現int 型,對double,字元這些類型無法實現,要實現這些類型的交換就要重新編寫另一個swap函數。使用模板的目的就是要讓這程式的實現與類型無關,比如一個swap模板函數,即可以實現int 型,又可以實現double型的交換。模板可以應用於函數和類。下麵分別介紹。
註意:模板的聲明或定義只能在全局,命名空間或類範圍內進行。即不能在局部範圍,函數內進行,比如不能在main函數中聲明或定義一個模板。
具體的請看------------------------------------>點我點我!
在此就不多講了。
C++vector函數:
int size():
作用:獲取vector大小。
resize(int x)
作用:變長為x。
clear()
作用:清空vector。
push_back(),pop_back():
棧操作。
vector // 創建一個空的vector。
vector c1(c2) // 複製一個vector
vector c(n) // 創建一個vector,含有n個數據,數據均已預設構造產生
vector c(n, elem) // 創建一個含有n個elem拷貝的vector
vector c(beg,end) // 創建一個含有n個elem拷貝的vector
1. 析構函數
c.~vector () // 銷毀所有數據,釋放記憶體
2. 成員函數
c.assign(beg,end)c.assign(n,elem)
將[beg; end)區間中的數據賦值給c。將n個elem的拷貝賦值給c。
c.at(idx)
傳回索引idx所指的數據,如果idx越界,拋出out_of_range。
c.back() // 傳回最後一個數據,不檢查這個數據是否存在。
c.begin() // 傳回迭代器中的第一個數據地址。
c.capacity() // 返回容器中數據個數。
c.clear() // 移除容器中所有數據。
c.empty() // 判斷容器是否為空。
c.end() // 指向迭代器中末端元素的下一個,指向一個不存在元素。
c.erase(pos) // 刪除pos位置的數據,傳回下一個數據的位置。
c.erase(beg,end) //刪除[beg,end)區間的數據,傳回下一個數據的位置。
c.front() // 傳回第一個數據。
get_allocator // 使用構造函數返回一個拷貝。
c.insert(pos,elem) // 在pos位置插入一個elem拷貝,傳回新數據位置。
c.insert(pos,n,elem) // 在pos位置插入n個elem數據。無返回值。
c.insert(pos,beg,end) // 在pos位置插入在[beg,end)區間的數據。無返回值。
c.max_size() // 返回容器中最大數據的數量。
c.pop_back() // 刪除最後一個數據。
c.push_back(elem) // 在尾部加入一個數據。
c.rbegin() // 傳回一個逆向隊列的第一個數據。
c.rend() // 傳回一個逆向隊列的最後一個數據的下一個位置。
c.resize(num) // 重新指定隊列的長度。
c.reserve() // 保留適當的容量。
c.size() // 返回容器中實際數據的個數。
c1.swap(c2)
swap(c1,c2) // 將c1和c2元素互換。同上操作。
operator[] // 返回容器中指定位置的一個引用。
舉個例子吧!
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 6 int main() 7 { 8 vector<int> s; 9 s.resize(10); //變長為10 10 s[0] = 1; 11 s[1] = 2; 12 s[2] = 3; 13 s[3] = 4; 14 s[4] = 5; 15 s[5] = 6; 16 s[6] = 7; 17 s[7] = 8; 18 s[8] = 9; 19 s[9] = 10; 20 cout << "vector:" << endl; 21 for (auto i = s.cbegin(); i != s.cend(); i++) 22 cout << *i << " "; 23 24 25 cout << "\n棧操作push_back加入18\n"; 26 s.push_back(18); 27 for (auto i = s.cbegin(); i != s.cend(); i++) 28 cout << *i << " "; 29 cout << endl; 30 31 32 cout << "\n棧操作push_back加入19\n"; 33 s.push_back(19); 34 for (auto i = s.cbegin(); i != s.cend(); i++) 35 cout << *i << " "; 36 cout << endl; 37 38 39 cout << "\n棧操作pop_back放走了最後的元素:\n"; 40 s.pop_back(); 41 for (auto i = s.cbegin(); i != s.cend(); i++) 42 cout << *i << " "; 43 cout << endl; 44 45 cout << "\n操作erase(s.begin+3):\n"; 46 s.erase(s.begin()+3); 47 for (auto i = s.cbegin(); i != s.cend(); i++) 48 cout << *i << " "; 49 cout << endl; 50 }
運行截圖: