標準庫Vector學習筆記

2021-09-20 06:51:52 字數 2744 閱讀 9469

1、vector是同一型別物件的集合。vector不是一種資料型別,而是乙個類模板(class template),可以用來定義任意多種資料型別,如vector、vector都是資料型別。

2、vector 尖括號內type指定物件的型別。

建構函式型別如下:

vector v1 ; default constructor v1為空

vector v2(v); v2 is acopy of v1

vector v3(n,i); v3包含n個值為i的元素

vector v4(n); v4含有值初始化的元素的n個副本

3、vector值的初始化

vector

t若是內建型別,則標準庫用0來建立元素初始化式。

t若是類型別:

1)含有建構函式的類型別,用該類的預設建構函式建立元素初始化式

2)有自定義建構函式,但沒有預設建構函式,在初始化時,不僅要提供元素個數,還要提供元素初始值。

3)沒有定義任何型別的建構函式,標準庫任然產生乙個帶初始值的物件,物件的每乙個成員都進行了值初始化。

4、vector物件動態增長

vector物件(以及其他標準庫容器物件),有乙個重要屬性就是可以在執行時高效的新增元素。

雖然可以對給定元素個數的vector預先分配記憶體,但更有效的方法是先初始化乙個空的vector物件,然後再動態的新增元素。

5、vector物件的操作

v.empty() return boolean

v.size() 函式返回的結果是該型別的元素的個數

v.push_back(t)在v的末尾新增乙個值為t的元素

v[n]

v1 = v2 把v1中元素替換為v2中元素的副本

v1 == v2 return boolean

!= , < , <= , > , >= 保持操作符原有的含義

注意:size_type 和v.size()各自的用法

size_type 總是和一定的資料型別相關使用size_type時,必須指出該型別是在**定義的

vector::size_type//ok

vecto::size_type//error

vector ivecivec.size()//ok ivec.size()返回的結果是vector::size_type型別

6、vector下標操作

和陣列類似的操作方法用下標訪問它們,下標從0開始

//用for迴圈將vector中元素置零

for (vector::size_type ix = 0 ; ix != ivec.size() ; ++ix)

ivec[ix] = 0;

注意:1)用 != 來檢查下標是否越界,而不是用 <

2)for語句的e2,在每次都呼叫size()成員函式,而不是在進入迴圈前儲存它返回的值

c++程式設計師習慣使用 != 而不是 < 來編寫迴圈判斷條件

由於vector可以動態增長,所以不能在迴圈前儲存size()的返回值

必須是已經存在的元素才能用下標進行索引,通過下標操作進行賦值時,不會新增任何元素。

vector ivec;// empty vector

for (vector::size_type ix = 0 ; ix !=10 ; ++ix)

ivec[ix] = ix; // error vector沒有任何元素

ivec.push_back(ix); //ok 新增新元素到vector中

ivec[10]; // error 下標溢位 !! 切忌

vector容器有以下操作:

c.assign(beg,end) 將[beg; end)區間中的資料賦值給c。

c.assign(n,elem) 將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元素互換。同上操作。

SYBASE資料庫學習筆記

sybase菜鳥學習筆記 sybase版本 ase 12.5.4 中文版 1 無法load資料庫,提示can t open a connection to site syb backup 問題產生原因 1 sybase資料庫備份伺服器沒有啟動 2 當使用backup server做dump load...

MySQL資料庫學習筆記 五

mysql資料庫學習筆記 五 mysql字串函式 日期時間函式 一 常見字串函式 1 char length 獲取長度 字元為單位 2 format 格式化 3 insert 替換的方式插入 4 instr 獲取位置 5 left right 取左 取右 6 length 獲取長度 位元組為單位 7...

SQL server資料庫總結筆記

建表的兩種方式 一 兒子,爸爸,爺爺式 包含式,屬於式 至少需要兩個表。經典案例 學校 班級 學生 建表訣竅 1 乙個物件 實體 乙個表 2 小表裡面有大表 主鍵 下級的小表包含上一級大表的主鍵,比如學生表裡面包含班級表的主鍵,班級表包含學校表的主鍵,學生表裡面沒有必要包含學校表的主鍵,不是不行,而...