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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376277.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376277.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376277.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux關閉聲音

對于CentOS/Redhat/RHEL/Fedora系統&#xff0c;使用root身份執行&#xff1a;echo "alias pcspkr off" >> /etc/modprobe.conf轉載于:https://www.cnblogs.com/keethebest/p/3434821.html

Bundle Identifier

Bundle Identifier : 產品的唯一標識符 1.在模擬器上面&#xff0c;只能有一個唯一的標識符的應用程序 2.在AppStore上&#xff0c;所有的應用程序的Bundler ID都是唯一的 Bundle ID 公司的反向域名 產品名 Bundle ID 不支持中文&#xff0c;因此如果是上架產品&#xff0c;需…

c++ array學習

參考資料&#xff1a; cppreference.com 本文代碼&#xff1a; 本文源碼 array和vector的區別是array是和C中的數組類似&#xff0c;不能動態改變數組大小&#xff0c;所以會比vector少很多函數。 目錄隱式定義的成員函數1.operator &#xff08;將另一個容器拷貝過來&#x…

lucene4入門(2)搜索

歡迎轉載http://www.cnblogs.com/shizhongtao/p/3440479.html 接著上一篇&#xff0c;這里繼續搜索&#xff0c;對于搜索和創建一樣&#xff0c;首先你要確定搜索位置&#xff0c;然后用規定的類來讀取。還要注意一點&#xff0c;確定分詞器&#xff0c;因為不同的分詞器所創建…

Topcoder SRM 648 (div.2)

第一次做TC全部通過&#xff0c;截圖紀念一下。 終于藍了一次&#xff0c;也是TC上第一次變成藍名&#xff0c;下次就要做Div.1了&#xff0c;希望div1不要掛零。。。_(:зゝ∠)_ A. KitayutaMart2 萬年不變的水題。 #include<cstdio> #include<cstring> #include&…

Kadane's algorithm學習

Kadane’s algorithm 簡單來說就是用來計算數組中的連續子數組之和最大是多少 vector<int> vec; int temp 0,ans 0; for(int i0;i<vec.size();i){temp max(tempvec[i],vec[i]);ans max(temp,ans); } return ans;循環的第一行就是用來比較當前位置的值和前面數組…

好用的ajax后臺框架

dwz 簡單實用的國產jquery Ui框架 http://www.j-ui.com/#_blank轉載于:https://www.cnblogs.com/userbibi/p/3441382.html

OpenFire源碼學習之十九:在openfire中使用redis插件(上)

Redis插件 介紹 Redis是目前比較流行的NO-SQL&#xff0c;基于K,V的數據庫系統。關于它的相關操作信息&#xff0c;本人這里就不做重復了&#xff0c;相關資料可以看這個網站http://www.redis.io/(官網)、http://www.redis.cn/(中文站)。 這里本人想說的是&#xff0c;拿Redis做…

c++ queue學習

參考資料&#xff1a; cppreference.com 本文代碼&#xff1a; 本文源碼 目錄成員函數1.operator &#xff08;賦值給容器&#xff09;元素訪問2.front &#xff08;訪問第一個元素&#xff09;3.back &#xff08;訪問最后一個元素&#xff09;容量4.empty &#xff08;判斷容…

沒有文件擴展“.js”的腳本引擎問題解決

安裝MinGW的時候提示沒有文件擴展“.js”的腳本引擎。原因&#xff1a;系統安裝Dreamwear、UltraEdit、EditPlus后修改了.js文件的默認打開方式。當想直接執行js腳本時就會出現此錯誤。解決辦法&#xff1a;打開注冊表編輯器&#xff0c;定位[HKEY_CLASSES_ROOT.js]這一項&…

160 - 54 eKH

環境&#xff1a;windows xp 工具&#xff1a; 1、OllyDBG 2、IDA 3、exeinfo 查殼發現是程序無殼且用Delphi語言編寫 可以通過搜索字符串的方式定位關鍵函數地址 這里定位到是 00427B44ReadInput(a2, &v17); // 讀取輸入的usernameif ( StrL…

點賺接口(第二版)

1.查看是否有新消息 url&#xff1a;/get/message/status?user_id{user_id} method&#xff1a;get response&#xff1a; {"code": "ok","msg": "","data": 0 //新消息數目 } 2.獲取消息列表 url&#xff1a;/get/messa…

Java基礎之線程——使用Runnable接口(JumbleNames)

控制臺程序。 除了定義Thread新的子類外&#xff0c;還可以在類中實現Runnable接口。您會發現這比從Thread類派生子類更方便&#xff0c;因為在實現Runnable接口時可以從不是Thread的類派生子類&#xff0c;并且仍然表示線程。Java只允許有單個基類&#xff0c;如果類派生于Thr…

cpri帶寬不足的解決方法_白皮書:FPGA賦能下一代通信和網絡解決方案(第四部分)...

對PCIe Gen 5的支持除了以太網和存儲控制器&#xff0c;Speedster7t FPGA上提供的對PCIe Gen 5的支持還能夠與主機處理器緊密集成&#xff0c;以支持諸如sidecar智能網卡(SmartNIC)設計等高性能加速器應用。PCI Gen 5控制器使其能夠讀取和寫入存儲在FPGA內存層級結構中的數據&a…

laravel里面使用event

模式&#xff1a;大概是通過一個自定義的event&#xff0c;一個handler&#xff0c;還有一個binder&#xff0c;然后用來簡化通知模型 生成自定義的event ./artisan make:event MyEvent 生成自定義的handler ./artisan handler:event MyEventHandler --eventMyEvent 然后在Even…

C語言的條件編譯#if, #elif, #else, #endif、#ifdef, #ifndef

有些程序在調試、兼容性、平臺移植等情況下可能想要通過簡單地設置一些參數就生成一個不同的軟件&#xff0c;這當然可以通過變量設置&#xff0c;把所有可能用到的代碼都寫進去&#xff0c;在初始化時配置&#xff0c;但在不同的情況下可能只用到一部分代碼&#xff0c;就沒必…

山體等高線怎么看_每日一題 | 此處向斜山,你看出來了嗎?

每日一題 | 此處向斜山&#xff0c;你看出來了嗎&#xff1f;(2018江蘇高考)如圖為某區域地質簡圖。該區沉積地層有Q、P、C、D、S2、S1&#xff0c;其年代依次變老。讀圖回答1&#xff5e;2題。1&#xff0e;從甲地到乙地的地形地質剖面示意圖是(  )2&#xff0e;為揭示深部地…

cmake The source directory xxxx does not appear to contain CMakeLists.txt

執行 cmake . 的時候報錯&#xff1a; The source directory “xxxx” does not appear to contain CMakeLists.txt 簡單來說就是當前文件夾里面沒有 CMakeLists.txt

SSH出錯--hibernate--org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User]

String queryString "from user where u.userName ? and u.userPassword ?"; ----------------------------------------------------------- 改為&#xff1a; String queryString "from User where u.userName ? and u.userPassword ?"; 我估…

Linux下的tar壓縮解壓縮命令詳解

tar -c: 建立壓縮檔案-x&#xff1a;解壓-t&#xff1a;查看內容-r&#xff1a;向壓縮歸檔文件末尾追加文件-u&#xff1a;更新原壓縮包中的文件 這五個是獨立的命令&#xff0c;壓縮解壓都要用到其中一個&#xff0c;可以和別的命令連用但只能用其中一個。下面的參數是根據需要…