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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ vector学习

發布時間:2023/12/1 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ vector学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考資料:
cppreference.com

本文代碼:
本文源碼

目錄

    • 隱式成員函數
      • 1.operator= (賦值給容器)
      • 2.assign (將值賦給容器)
    • 元素訪問
      • 3.at (訪問指定元素,進行下標檢查)
      • 4.operator[] (訪問指定元素,可能出現訪問越界)
      • 5.front (訪問第一個元素)
      • 6.back (訪問最后一個元素)
      • 7.data (返回數組第一個元素的地址指針)
    • 迭代器
      • 8.begin/cbegin (返回指向容器第一個元素的迭代器 /常量迭代器)
      • 9.end/cend(返回指向容器尾端的迭代器/常量迭代器)
      • 10.rbegin/rcbegin(返回指向容器最后一個元素的迭代器/常量迭代器)
      • 11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)
    • 容量
      • 12.empty (判斷容器是否為空)
      • 13.size (返回容器當前元素個數)
      • 14.max_size (返回容器可容納的最大元素個數)
      • 15.reserve (增加容器容納空間)
      • 16.capacity (返回容器當前可容納的元素個數)
      • 17.shrink_to_fit (回收容器未使用的空間)
    • 修改器
      • 18.clear (清除容器中的所有元素)
      • 19.insert (在容器的指定位置插入指定的值)
      • 20.emplace (???)
      • 21.erase (移除容器內指定位置的值)
      • 22.push_back (從容器的尾端添加元素)
      • 23.emplace_back (???)
      • 24.pop_back (移除容器最后一個元素 )
      • 25.resize (改變容器存儲元素個數)
      • 26.swap (交換兩個容器的內容)
](目錄)

隱式成員函數

1.operator= (賦值給容器)

可以用 = 來進行 vector 的賦值,賦值后他們是兩個不同的東西,即使修改了vec,也不會修改對tempVec,是深拷貝:

vector<int> vec; vector<int> tempVec; tempVec = vec;

2.assign (將值賦給容器)

void assign( size_type count, const T& value );

簡單來說就是將vector的內容轉成countvalue

tempVec.assign(10,6) /* 輸出: 6 6 6 6 6 6 6 6 6 6 */

元素訪問

3.at (訪問指定元素,進行下標檢查)

site超出范圍的時候會跑出 std::out_of_range 類型異常

vec.at(site)

4.operator[] (訪問指定元素,可能出現訪問越界)

vec[site]

5.front (訪問第一個元素)

vec.front()

6.back (訪問最后一個元素)

vec.bakc()

7.data (返回數組第一個元素的地址指針)

返回的是指向第一個元素的指針

vec.data(site)

迭代器

最簡單地理解就是操作容器的指針

8.begin/cbegin (返回指向容器第一個元素的迭代器 /常量迭代器)

返回指向第一個元素的迭代器/常量迭代器(指向的內容不能改變,指向誰可以改)

std::vector<int>::iterator itr = vec.begin(); //指向第二個元素 std::cout<<*(++itr)<<std::endl; std::vector<int>::const_iterator cItr = vec.cbegin(); //指向第一個元素 std::cout<<*cItr<<std::endl;//可以這樣 cItr = itr; //不可以這樣:*(++cItr)

9.end/cend(返回指向容器尾端的迭代器/常量迭代器)

返回指向最后一個元素的后一個位置的迭代器(最后一個元素的身后),和begin類似,至于cend除了作為vector的結束之外還有什么用就暫時還沒想到。

std::vector<int>::iterator itr = vec.end(); //倒數第一個元素 std::cout << *(--itr) << std::endl;std::vector<int>::const_iterator cItr = vec.cend(); //順序打印vec for(itr = vec.beign();i!=cItr;++i){std::cout<<*i<<" "; }

10.rbegin/rcbegin(返回指向容器最后一個元素的迭代器/常量迭代器)

這是一個逆向迭代器,使用 ++ 的時候不是往后移動,而是往前移動,使用 才能往后移動。

std::vector<int>::reverse_iterator itr = vec.rbegin(); //倒數第二個元素 std::cout << *(++itr) << std::endl;std::vector<int>::const_reverse_iterator cItr = vec.crbegin(); //最后一個元素 std::cout << *cItr << std::endl;

11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)

end類似,end指向容器最后一個元素的后一個位置,rend指向容器第一個元素的前一個位置,所以我也不知道這個crend的其他作用

std::vector<int>::reverse_iterator itr = vec.rend(); //第一個元素是: std::cout << *(--itr) << std::endl;std::vector<int>::const_reverse_iterator cItr = vec.crend(); //逆序打印vec: for (itr = vec.rbegin(); itr != cItr; ++itr) {std::cout << *itr << " "; }

容量

12.empty (判斷容器是否為空)

為空時返回true,非空時返回false

bool empty() if (vec.empty()) {std::cout << "vec為空!\n";}else {std::cout << "vec不為空!\n";}

13.size (返回容器當前元素個數)

vec.size();

14.max_size (返回容器可容納的最大元素個數)

vec.max_size();

15.reserve (增加容器容納空間)

將vec的容量增加到大于或等于count,如果count小于當前的已分配的控件大小就不做任何事。

vec.reserve(count);

16.capacity (返回容器當前可容納的元素個數)

vec.capacity();

17.shrink_to_fit (回收容器未使用的空間)

//假設輸出10,vec.size()也是返回10 std::cout << vec.capacity() << std::endl; //增加容量 vec.reserve(50); //此時輸出50 std::cout << vec.capacity() << std::endl; //回收空間 vec.shrink_to_fit(); //輸出10 std::cout << vec.capacity() << std::endl;

修改器

18.clear (清除容器中的所有元素)

// 假設輸出10 std::cout << vec.size() << std::endl; vec.clear(); // 輸出0 std::cout << vec.size() << std::endl;

19.insert (在容器的指定位置插入指定的值)

//插入之前:1 3 5 7 9 //在第3個位置插入4: tempVec.insert(tempVec.begin() + 3, 4); //1 3 5 4 7 9//在第3個位置插入4個5: tempVec.insert(tempVec.begin() + 3, 4, 5 ); //1 3 5 5 5 5 5 4 7 9

20.emplace (???)

21.erase (移除容器內指定位置的值)

//刪除第3個位置的值 tempVec.erase(tempVec.begin()+3);//刪除容器第0到第5個元素(不包括第5個即[0,5)) tempVec.erase(tempVec.begin(), tempVec.begin() + 5);

22.push_back (從容器的尾端添加元素)

//vec: 1 3 5 vec.push_back(7) //vec: 1 3 5 7

23.emplace_back (???)

24.pop_back (移除容器最后一個元素 )

//vec: 1 3 5 7 vec.pop_back(); //vec: 1 3 5

25.resize (改變容器存儲元素個數)

如果num小于容器當前元素個數則只保留容器前num
如果num大于容器當前元素個數則往容器添加元素直至num

//tempVec.size() 為 20 tempVec.resize(10) //只剩下前10個元素了//添加到15個元素,用默認值填充 tempVec.resize(15); //現在tempVec的元素個數為15了,而且后5個是0//添加到20個元素,用指定值填充 tempVec.resize(20,999); //現在tempVec的元素個數為20了,而且后5個是999

26.swap (交換兩個容器的內容)

//交換前: //vec:1 3 5 7 //tempVec:2 4 6 8 vec.swap(tempVec) //交換后: //vec:2 4 6 8 //tempVec: 1 3 5 7

總結

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

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