免费可以看的无遮挡av无码|国产在线拍揄自揄视频网站|在线无码精品视频播放在|欧美亚洲国产成人精品,国产成人久久77777精品,亚洲欧美视频在线观看,色偷偷色噜噜狠狠网站久久

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  應(yīng)聘面試  >  物聯(lián)網(wǎng)面試題  > STL教程(四):C++ STL常用容器之vector

STL教程(四):C++ STL常用容器之vector

來源:千鋒教育
發(fā)布人:syq
時間: 2022-07-11 17:08:00 1657530480

  1、vector容器基本概念

  vector是一種單口的容器,又稱單端動態(tài)數(shù)組,vector所指的內(nèi)容是一片連續(xù)的空間,支持隨機訪問(Random Access),此外,vector容器的空間是動態(tài)增長的。

  2、vector容器本質(zhì)及其實現(xiàn)

  vector的數(shù)據(jù)安排以及操作方式,與array非常相似。兩者的唯一差別在于空間的運用的靈活性。

  Array是靜態(tài)空間,一旦配置了就不能改變,要換大一點或者小一點的空間,可以,一切瑣碎得由自己來,首先配置一塊新的空間,然后將舊空間的數(shù)據(jù)搬往新空間,再釋放原來的空間。

  Vector是動態(tài)空間,隨著元素的加入,它的內(nèi)部機制會自動擴充空間以容納新元素。因此vector的運用對于內(nèi)存的合理利用與運用的靈活性有很大的幫助,我們再也不必害怕空間不足而一開始就要求一個大塊頭的array了。

  Vector的實現(xiàn)技術(shù),關(guān)鍵在于其對大小的控制以及重新配置時的數(shù)據(jù)移動效率,一旦vector舊空間滿了,如果客戶每新增一個元素,vector內(nèi)部只是擴充一個元素的空間,實為不智,因為所謂的擴充空間(不論多大),一如剛所說,是”配置新空間-數(shù)據(jù)移動-釋放舊空間”的大工程,時間成本很高,應(yīng)該加入某種未雨綢繆的考慮,稍后我們便可以看到vector的空間配置策略。

  vector的未雨綢繆機制:當(dāng)容器滿的時候 會另辟一段空間(大小為2的N次方),將舊空間 的內(nèi)容 復(fù)制 到新空間 然后釋放舊空間。

7

  3、 vector迭代器

  Vector維護一個線性空間,所以不論元素的型別如何,普通指針都可以作為vector的迭代器,因為 vector迭代器所需要的操作行為,如operator, operator->, operator++, operator--, operator+, operator-, operator+=, operator-=, 普通指針天生具備。

  Vector支持隨機存取,而普通指針正有著這樣的能力。所以vector提供的是隨機訪問迭代器(Random Access Iterators).

  使用案例:

#define _CRT_SECURE_NO_WARNINGS #include<iostream>#include<vector> using namespace std; int main(){ 

vector<int> v; 

for (int i = 0; i < 10;i ++)

v.push_back(i);

cout << v.capacity() << endl; // v.capacity()容器的容量

}

system("pause"); 

return EXIT_SUCCESS; }

  4、 vector的數(shù)據(jù)結(jié)構(gòu)

  Vector所采用的數(shù)據(jù)結(jié)構(gòu)非常簡單,線性連續(xù)空間,它以兩個迭代器Myfirst和Mylast分別指向配置得來的連續(xù)空間中目前已被使用的范圍,并以迭代器_Myend指向整塊連續(xù)內(nèi)存空間的尾端。 為了降低空間配置時的速度成本,vector實際配置的大小可能比客戶端需求大一些,以備將來可能的擴充,這邊是容量的概念。換句話說,一個vector的容量永遠大于或等于其大小,一旦容量等于大小,便是滿載,下次再有新增元素,整個vector容器就得另覓居所。

  注意: 所謂動態(tài)增加大小,并不是在原空間之后續(xù)接新空間(因為無法保證原空間之后尚有可配置的空間),而是一塊更大的內(nèi)存空間,然后將原數(shù)據(jù)拷貝新空間,并釋放原空間。因此,對vector的任何操作,一旦引起空間的重新配置,指向原vector的所有迭代器就都失效了。這是程序員容易犯的一個錯誤,務(wù)必小心。

  5、vector常用API操作

  5.1vector構(gòu)造函數(shù)

vector<T> v; //采用模板實現(xiàn)類實現(xiàn),默認構(gòu)造函數(shù) vector(v.begin(), v.end());//將v[begin(), end())區(qū)間中的元素拷貝給本身。 vector(n, elem);//構(gòu)造函數(shù)將n個elem拷貝給本身。 vector(const vector &vec);//拷貝構(gòu)造函數(shù)。 //例子 使用第二個構(gòu)造函數(shù) 我們可以... int arr[] = {2,3,4,1,9}; 

vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));

  5.2vector常用賦值操作

assign(beg, end);//將[beg, end)區(qū)間中的數(shù)據(jù)拷貝賦值給本身。 assign(n, elem);//將n個elem拷貝賦值給本身。

vector& operator=(const vector &vec);//重載等號操作符 swap(vec);// 將vec與本身的元素互換。

  5.3vector大小操作

size();//返回容器中元素的個數(shù) empty();//判斷容器是否為空 resize(int num);//重新指定容器的長度為num,若容器變長,則以默認值填充新位置。如果容器變短, 則末尾超出容器長度的元素被刪除。 resize(int num, elem);//重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容 器變短,則末尾超出容器長>度的元素被刪除。 capacity();//容器的容量 reserve(int len);//容器預(yù)留len個元素長度,預(yù)留位置不初始化,元素不可訪問。

  5.4vector數(shù)據(jù)存取操作

at(int idx); //返回索引idx所指的數(shù)據(jù),如果idx越界,拋出out_of_range異常。operator[];//返回索引idx所指的數(shù)據(jù),越界時,運行直接報錯 front();//返回容器中第一個數(shù)據(jù)元素 back();//返回容器中最后一個數(shù)據(jù)元素.

  5.5vector插入和刪除操作

insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count個元素ele. push_back(ele); //尾部插入元素elepop_back();//刪除最后一個元素 erase(const_iterator start, const_iterator end);//刪除迭代器從start到end之間的元素 erase(const_iterator pos);//刪除迭代器指向的元素 clear();//刪除容器中所有元素

  6、vector使用案例

#define _CRT_SECURE_NO_WARNINGS

 #include<iostream>

 #include<vector>

 using namespace std; 

 int main()

 { 

 vector<int> v; 

 for (int i = 0; i < 100000;i ++)

 { 

v.push_back(i); 

 }

 cout << "capacity:" << v.capacity() << endl; 

 cout << "size:" << v.size() << endl; 

 //此時 通過resize改變?nèi)萜鞔笮?/p>

 v.resize(10); 

 cout << "capacity:" << v.capacity() << endl; 

 cout << "size:" << v.size() << endl; 

 //容量沒有改變

 vector<int>(v).swap(v); 

 cout << "capacity:" << v.capacity() << endl; 

 cout << "size:" << v.size() << endl;

system("pause"); 

return EXIT_SUCCESS; }

8

  6.2reserve預(yù)留空間

  如果調(diào)用reserve函數(shù)預(yù)留出足夠的空間,可以大大降低空間開辟次數(shù)。

#define _CRT_SECURE_NO_WARNINGS

 #include<iostream>

 #include<vector>

 using namespace std;

 int main()

 {

     vector<int> v;

    //預(yù)先開辟空間

    //v.reserve(100000);

    int* pStart = NULL;

    int count = 0;

    for (int i = 0; i < 100000;i ++)

    {

        v.push_back(i);

        if (pStart != &v[0])

        {

            pStart = &v[0];

            count++;

        }

    }

    cout << "count:" << count << endl;

    system("pause");

    return EXIT_SUCCESS;

}

 

9

#define _CRT_SECURE_NO_WARNINGS

 #include<iostream>

 #include<vector>

 using namespace std;

 int main()

 {

     vector<int> v;

    //預(yù)先開辟空間

    v.reserve(100000);

    int* pStart = NULL;

    int count = 0;

    for (int i = 0; i < 100000;i ++)

    {

        v.push_back(i);

        if (pStart != &v[0])

        {

            pStart = &v[0];

            count++;

        }

    }

    cout << "count:" << count << endl;

    system("pause");

    return EXIT_SUCCESS;}

 

10

  更多關(guān)于“物聯(lián)網(wǎng)培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴謹,每年培養(yǎng)泛IT人才近2萬人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
物聯(lián)網(wǎng)公司面試題:保障物聯(lián)網(wǎng)安全的措施有哪些?

題目:請談?wù)勀鷮ξ锫?lián)網(wǎng)安全的理解,以及在物聯(lián)網(wǎng)系統(tǒng)中保障安全性的措施?;卮穑何锫?lián)網(wǎng)安全是指在物聯(lián)網(wǎng)系統(tǒng)中保護設(shè)備、數(shù)據(jù)和通信免受未經(jīng)授...詳情>>

2023-07-26 11:59:27
物聯(lián)網(wǎng)中的邊緣計算是什么?請解釋其優(yōu)勢和應(yīng)用場景

答案:邊緣計算是一種將計算和數(shù)據(jù)處理能力移動到物聯(lián)網(wǎng)設(shè)備附近的計算模型。在邊緣計算中,數(shù)據(jù)的處理和分析發(fā)生在接近數(shù)據(jù)源的設(shè)備或邊緣節(jié)點...詳情>>

2023-07-18 14:15:00
可以介紹一下js的內(nèi)部Date對象功能嗎

提供了操作時間和日期的方法擁有一系列屬性和方法,可以用來獲取系統(tǒng)當(dāng)前時間或者設(shè)置 Date 對象中的時間 通過 getTime()方法可返回距 1970 年 ...詳情>>

2023-01-21 15:51:32
為什么需要三次握手,兩次不行嗎?

弄清這個問題,我們需要先弄明白三次握手的目的是什么,能不能只用兩次握手來達到同樣的目的?!〉谝淮挝帐郑嚎蛻舳税l(fā)送網(wǎng)絡(luò)包,服務(wù)端收到了。...詳情>>

2022-10-25 16:55:00
什么是半連接隊列?

服務(wù)器第一次收到客戶端的 SYN 之后,就會處于 SYN_RCVD 狀態(tài),此時雙方還沒有完全建立其連接,服務(wù)器會把此種狀態(tài)下請求連接放在一個隊列里,...詳情>>

2022-10-25 16:55:00
快速通道