日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

C++总结篇(5)vector

發(fā)布時間:2025/3/11 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++总结篇(5)vector 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

vector是表示可變大小數(shù)組的序列容器。就像數(shù)組一樣,vector也采用的連續(xù)存儲空間來存儲元素。也就是意味著可以采用下標(biāo)對vector的元素 進(jìn)行訪問,和數(shù)組一樣高效。但是又不像數(shù)組,它的大小是可以動態(tài)改變的,而且它的大小會被容器自動處理。

Vector迭代器:

  • begin+end: begin獲取第一個位置的迭代器,end獲取最后一個數(shù)據(jù)下一個位置的迭代器。
  • rbegin+rend: rbegin獲取最后一個位置的迭代器,rend獲取第一個位置前一個位置的迭代器
  • 如例:

    void test1(vector<int> &vec) {vector<int>::iterator it = vec.begin();while (it != vec.end()){cout << *it << endl;it++;} }void test2(vector<int> &vec) {vector<int>::reverse_iterator rit = vec.rbegin();while (rit != vec.rend()){cout << *rit << endl;rit++;} }int main() {vector<int>vec(4,10);vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);test1(vec);test2(vec);system("pause");return 0; }

    Vector空間增長

    size 獲取數(shù)據(jù)個數(shù) capacity 獲取容量大小 empty 判斷是否為空 resize 改變vector的size reserve 改變vector放入capacity

    如例:

    void test(vector<int> &vec) {cout << vec.size() << endl;//獲取有效數(shù)據(jù)的大小cout << vec.capacity() << endl;//獲取容量的大小cout << vec.empty() << endl;//檢查空間是否為空vec.resize(5);//改變有效數(shù)據(jù)的大小為5vec.reserve(15);//改變空間的大小為15cout << vec.size() << endl;cout << vec.capacity() << endl;//打印數(shù)據(jù)vector<int>::iterator it = vec.begin();while (it != vec.end()){cout << *it << endl;it++;}vec.clear();//清空cout << vec.size() << endl;cout << vec.capacity() << endl;cout << vec.empty() << endl; }

    Vector的增刪查改

    push_back 尾插 pop_back 尾刪 insert 在指定位置插入val erase 刪除指定位置的數(shù)據(jù) swap 交換兩個vector的數(shù)據(jù)空間 operator[] 像數(shù)組一樣訪問

    如例:

    vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end,int n) {for (; begin != end&&n; begin++, n--);return begin; }void test(vector<int> &vec) {vec.push_back(5);//尾插一個數(shù)據(jù)5vec.pop_back();//從尾刪除一個數(shù)據(jù)vector<int>::iterator pos = find(vec.begin(), vec.end(), 2);//查找第2個位置數(shù)據(jù)的迭代器并返回給posvec.insert(pos, 12);//在pos位置插入數(shù)據(jù)12vec.erase(pos);//刪除pos位置的數(shù)據(jù)//新建一個vector容器v并插入數(shù)據(jù)vector<int> v;v.push_back(5);v.push_back(6);v.push_back(7);v.push_back(8);swap(v, vec);//交換v與vec的數(shù)據(jù)cout << vec.operator[](1)<<endl;//打印vec中位置為1處的數(shù)據(jù) }

    迭代器失效

    插入數(shù)據(jù)迭代器失效
    當(dāng)在pos位置插入數(shù)據(jù)操作時,insert會使vector擴(kuò)容,一旦擴(kuò)容,pos指向的位置會被釋放,故而無法對其訪問。
    Vector擴(kuò)容并不是在原有的基礎(chǔ)上增大空間,而是重新開辟一個合適大小的空間,在將原來vector中的數(shù)據(jù)移到新開辟的vector中,再將原來vector的釋放掉。

    如例:

    vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end, int n) {for (; begin != end&&n; begin++, n--);return begin; }void test(vector<int> &vec) {vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << vec.size() << endl;cout << vec.capacity() << endl;vector<int>::iterator pos = find(vec.begin(), vec.end(), 3);vec.insert(pos, 11);cout << *pos << endl;//出錯 }

    刪除指定位置數(shù)據(jù)迭代器失效

    將pos位置的數(shù)據(jù)刪除掉,即將該數(shù)據(jù)存放的空間時放掉,在對該位置進(jìn)訪問即為非法訪問。

    如例:

    vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end, int n) {for (; begin != end&&n; begin++, n--);return begin; }void test(vector<int> &vec) {vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << vec.size() << endl;cout << vec.capacity() << endl;vector<int>::iterator pos = find(vec.begin(), vec.end(), 3);vec.erase(pos);cout << *pos << endl;//出錯 } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的C++总结篇(5)vector的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。