C++學習筆記(二)——vector庫篇

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))

  1. 參考博文《C++ STL標準模板庫vector的求長度size()-1的一個小坑》 ↩︎

  2. 參考博文《vector.size()-1引發的錯誤》 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章