vector是什麼?
vector
是C++ STL中的一個動態數組類庫,支持隨機訪問。與Java中的ArrayList
類似。
如何引入vector庫?
#include<vector>
using namespace std;
如何創建一個vector?
與Java中的ArrayList類似,使用泛型創建一個可以存儲特定類型數據的vector。
vector<int> nums;
如以上代碼,創建一個int
型的vector。
常用方法
插入元素
// 向末尾添加一個元素
void push_back(const T& x)
刪除元素
// 刪除末尾的元素
void pop_back()
// 清空所有元素
void clear()
訪問元素
// 返回pos位置元素的引用
reference at(int pos)
// 返回首元素的引用
reference front()
// 返回尾元素的引用
reference back()
// 數組式的訪問方式
nums[index]
修改元素
// 設置第n個元素的值爲x
void assign(int n,const T& x)
// 數組式的修改方式
nums[index] = newValue;
求大小
unsigned int size() const
需要注意的是:這裏的返回值類型爲unsigned int
,即無符號整型。
判空
// 判斷是否爲空
bool empty() const
// 通過當前大小
if (nums.size() == 0)
二維數組
vector<vector<int>> nums;
實踐中遇到的一個坑
當vector爲空時,一個常規的判斷
if (0 < nums.size() - 1)
預期結果爲假,但實際運行結果爲真。
經過調試發現,是nums.size() - 1
得到了一個出乎意料的結果,輸出顯示其爲4294967295
,即2^32-1
。
究其原因,vector的size
方法返回值類型爲無符號整型,實際上是做0 + (-1)
運算,由於負數通過補碼存儲,-1
的二進制表示爲11111111 11111111 11111111 11111111
,與0求和仍爲32個1,轉換爲10進制即爲4294967295
[1]。
解決方案
將計算結果強制轉換爲有符號整型[2]。
if (0 < (int)(nums.size() - 1))