日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stl-vector

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stl-vector 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

標準庫Vector類型

使用需要的頭文件:

#include <vector>

Vector:Vector 是一個類模板。不是一種數據類型。 Vector<int>是一種數據類型。

?

一、??定義和初始化

Vector<T> v1;???????//默認構造函數v1為空

Vector<T> v2(v1);//v2是v1的一個副本

Vector<T> v3(n,i);//v3包含n個值為i的元素

Vector<T> v4(n);??//v4含有n個值為0的元素

二、??值初始化

1>?????如果沒有指定元素初始化式,標準庫自行提供一個初始化值進行值初始化。

2>?????如果保存的式含有構造函數的類類型的元素,標準庫使用該類型的構造函數初始化。

3>?????如果保存的式沒有構造函數的類類型的元素,標準庫產生一個帶初始值的對象,使用這個對象進行值初始化。

三、Vector對象最重要的幾種操作

1.????v.push_back(t)?????????????在數組的最后添加一個值為t的數據

2.????v.size()?????????????????????????當前使用數據的大小

3.????v.empty()??????????????????????判斷vector是否為空

4.????v[n]???????????????????????????????返回v中位置為n的元素

5.????v1=v2???????????????????????????把v1的元素替換為v2元素的副本

6.????v1==v2?????????????????????????判斷v1與v2是否相等

7.????!=、<、<=、>、>=??????保持這些操作符慣有含義

vector容器類型

???vector容器是一個模板類,可以存放任何類型的對象(但必須是同一類對象)。vector對象可以在運行時高效地添加元素,并且vector中元素是連續存儲的。

vector的構造

函數原型:

template<typename T>

???explicit vector();?????????????????????????????????// 默認構造函數,vector對象為空

???explicit vector(size_type n, const T& v = T());????// 創建有n個元素的vector對象

???vector(const vector& x);

???vector(const_iterator first, const_iterator last);

注:vector容器內存放的所有對象都是經過初始化的。如果沒有指定存儲對象的初始值,那么對于內置類型將用0初始化,對于類類型將調用其默認構造函數進行初始化(如果有其它構造函數而沒有默認構造函數,那么此時必須提供元素初始值才能放入容器中)。

舉例:

vector<string> v1;?????????// 創建空容器,其對象類型為string類

vector<string> v2(10);?????// 創建有10個具有初始值(即空串)的string類對象的容器

vector<string> v3(5, "hello"); // 創建有5個值為“hello”的string類對象的容器

vector<string> v4(v3.begin(), v3.end()); // v4是與v3相同的容器(完全復制)

c.push_back(elem); //在容器最后位置添加一個元素elemc.pop_back(); //刪除容器最后位置處的元素c.at(index); //返回指定index位置處的元素c.begin(); // 返回指向容器最開始位置數據的指針c.end(); // 返回指向容器最后一個數據單元的指+1c.front(); // 返回容器最開始單元數據的引用c.back(); // 返回容器最后一個數據的引用c.max_size(); // 返回容器的最大容量c.size(); // 返回當前容器中實際存放元素的個數c.capacity();// 同c.size()c.resize(); // 重新設置vector的容量c.reserve();// 同c.resize()c.erase(p);// 刪除指針p指向位置的數據,返回下指向下一個數據位置的指針(迭代器c.erase(begin,end) // 刪除begin,end區間的數據,返回指向下一個數據位置的指針(迭代器)c.clear(); // 清除所有數據c.rbegin(); // 將vector反轉后的開始指針返回(其實就是原來的end-1)c.rend(); // 將vector反轉后的結束指針返回(其實就是原來的begin-1)c.empty(); // 判斷容器是否為空,若為空返回true,否則返回falsec1.swap(c2); // 交換兩個容器中的數據c.insert(p,elem);// 在指針p指向的位置插入數據elem,返回指向elem位置的指針 c.insert(p,n,elem);//在位置p插入n個elem數據,無返回值c.insert(p,begin,end)// 在位置p插入在區間[begin,end)的數據,無返回值
應用實例:

#include <iostream> #include <cassert> #include <vector> using namespace std; int main() {vector<string> v(5, "hello");vector<string> v2(v.begin(), v.end());assert(v == v2);cout<<"> Before operation"<<endl;for(vector<string>::const_iterator it = v.begin(); it < v.end(); ++it)cout<<*it<<endl;v.insert(v.begin() + 3, 4, "hello, world");cout<<"> After insert"<<endl;for(vector<string>::size_type i = 0; i < v.size(); ++i)cout<<v[i]<<endl;vector<string>::iterator it = v.erase(v.begin() + 3, v.begin() + 6);assert(*it == "hello, world");cout<<"> After erase"<<endl;for(vector<string>::size_type i = 0; i != v.size(); ++i)cout<<v[i]<<endl;assert(v.begin() + v.size() == v.end());assert(v.end() - v.size() == v.begin());assert(v.begin() - v.end() == -vector<string>::difference_type(v.size()));return 0; }

程序說明:上面程序中用了三個循環輸出容器中的元素,每個循環的遍歷方式是不一樣的。特別需要說明的是,第二個循環在條件判斷中使用了size() 函數,而不是在循環之前先保存在變量中再使用。之所以這樣做,有兩個原因:其一,如果將來在修改程序時,在循環中修改了容器元素個數,這個循環仍然能很好地工作,而如果先保存size()函數值就不正確了;其二,由于這些小函數(其實現只需要一條返回語句)基本上都被聲明為inline,所以不需要考慮效率問題。

---------------------------------

c++編程語言中有一種叫做Vector的應用方法,它的作用在實際編程中是非常重要的。在這里我們將會為大家詳細介紹一下C++ Vector的相關應用技巧及基本內容,希望能給大家帶來一些幫助。

(1)vector< 類型 > 標識符 ;

(2)vector< 類型 > 標識符(最大容量) ;

(3)vector< 類型 > 標識符(最大容量,初始所有值);

(4) int i[4] = {12,3,4,5};

1.???????????????vector<?類型?>?vi(i?,?i+2);?//得到i索引值為3以后的值?;??

(5)vector< vector<int> > //vi 定義2維的容器;記得一定要有空格,不然會報錯

1.???????????????vector<?int?>?line???

2.???????????????//?在使用的時候一定要首先將vi個行進行初始化;???

3.???????????????for(int?i?=?0?;?i?<?10?;?i?++) ?

4.???????????????{ ?

5.???????????????vector.push_back(line); ?

6.???????????????} ?

7.???????????????///?個人認為使用vector定義二維數組很好,
因為是長度可以不預先確定。很好。?

(6)C++ Vector排序

1.???????????????vector<?int?>?vi?;???

2.???????????????vi.push_back(1); ?

3.???????????????vi.push_back(3); ?

4.???????????????vi.push_back(0); ?

5.???????????????sort(vi.begin()?,?vi.end());?///?/小到大 ?

6.???????????????reverse(vi.begin(),vi.end())?///?從大道小?

(7)順序訪問

1.???????????????vector?<?int?>?vi?;???

2.???????????????for(?int?i?=?0?;?i?<?10?;?i?++) ?

3.???????????????{ ?

4.???????????????vector.push_back(i); ?

5.???????????????}???

6.???????????????for(int?i?=?0?;?i?<?10?;?i?++)?///?第一種調用方法 ?

7.???????????????{ ?

8.???????????????cout?<<vector[i]?<<"?"?;???

9.???????????????} ?

10.???????????for(vector<int>::iterator?it?=?vi.begin()?;?

11.???????????it?!=vi.end()?;?it++)?///第二種調用方法 ?

12.???????????{ ?

13.???????????cout?<<?*it?<<?"?"?; ?

14.???????????}?

(8)尋找

1.???????????????vector?<?int?>?vi?;???

2.???????????????for(?int?i?=?0?;?i?<?10?;?i?++) ?

3.???????????????{ ?

4.???????????????vector.push_back(i); ?

5.???????????????}???

6.???????????????vector?<?int?>::interator?it?=?find(vi.begin()?,?vi.end,3)?; ?

7.???????????????cout?<<?*it?<<?endl?;?///返回容器內找到值的位置。?

(9)使用數組對C++ Vector進行初始化

1.???????????????int?i[10]?={1,2,3,4,5,6,7,78,8}?; ?

2.???????????????///第一種???

3.???????????????vector<int>?vi(i+1,i+3);?///從第2個元素到第三個元素 ?

4.???????????????for(vector?<int>::interator?it?=?vi.begin()?;?

5.???????????????it?!=?vi.end()?;?it++) ?

6.???????????????{ ?

7.???????????????cout?<<?*it?<<"?"?;???

8.???????????????}?

(10) 結構體類型

1.???????????????struct?temp ?

2.???????????????{ ?

3.???????????????public?: ?

4.???????????????string?str?;???

5.???????????????public?: ?

6.???????????????int?id?; ?

7.???????????????}tmp ?

8.???????????????int?main() ?

9.???????????????{ ?

10.???????????vector?<temp>?t?;???

11.???????????temp?w1?;???

12.???????????w1.str?=?"Hellowor"?; ?

13.???????????w1.id?=?1?;???

14.???????????t.push_back(w1); ?

15.???????????cout?<<?w1.str?<<?","?<<w1.id?<<endl?;???

16.???????????return?0?;???

17.???????????}?



與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的stl-vector的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。