C++(8.5)--Vector容器

向量容器Vector

  • 1. 定義/初始化
  • 2. 遍歷
  • 3. 常用操作
    • vector 迭代器遍歷,sort, reverse,

1. 定義/初始化

vector是同一類型對象的集合,被稱作容器。vector實際是一個類模版,可用于保存多種數據類型的數據(確定類型的vector 就只能裝同種數據)。模版類決定了vector 聲明時需要提供的信息。??Vector 不是一種數據類型,但是vector<int>\text{vector<int>}vector<int>vector<string>\text{vector<string>}vector<string>,… 都是數據類型。

Vector Vs 數組:

  1. 動態數組,可以在運行階段設置長度
  2. 具有數組的快速索引方式
  3. 可以插入和刪除元素

定義和初始化- -尖角號:范型編程

# include <vector>
using std::vector
vector<T> v1;        // vector 保存了類型為T的對象, 默認構造函數,v1 為空
vector<T> v2(v1);    // v2 是 v1 的一個副本, 拷貝構造函數?兩個是一個地址?
vector<T> v3(n, i);  // v3 包含n個為i 的元素
vector<T> v4(v);     // v4 含有值初始化的元素的n個元素,具體初始化值由T的默認構造函數決定vector <double> vec1;  
vector <string> vec2(5); //分配5個空間, 使用默認值初始化
vector <int> vec3(5,998); //分配5個空間,使用998初始化
vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};  // 創建的同時指定初始值以及元素個數

2. 遍歷

vector<int> cards(54, 0);// way1--C 語言的習慣: 傳統for 循環
for(int i = 0; i < cards.size(); i++){cout << cards[i] << "\t";
}
cout << "\n" << endl;// way2--C++語言習慣,迭代器的寫法
for(vector<int>::const_iterator iter = cards.begin(); iter != cards.end(); iter++){cout << *iter << ", ";
}
cout << endl; */// way3--C++11 之后:迭代器的簡寫版本,類型推斷
for(auto iter = cards.begin(); iter != cards.end(); iter++){cout << *iter << "。 ";}cout << endl;// way4--區間遍歷
for(auto card : cards){cout << card << ":" << getColor(card) << "-" << getValue(card) << "\t";
}
cout << endl;// 使用算法的方式,將容器的內容復制到cout 綁定的迭代器中
// #include <iterator>
//    copy(cards.cbegin(), cards.cend(), ostream_iterator<int>(cout, "- "));
//    cout << endl;

3. 常用操作

vector常有的操作:

常用操作
clear()移除容器中的所有數據
empty()判斷容器是否為空
size()返回容器中元素的個數
[index],at(index)返回索引為index的元素
erase(pos)刪除pos 位置處的數據
erase(beg, end)刪除[beg, end) 區間的數據
front()返回第一個元素
insert(pos, elem)在pos位置插入一個元素
pop_back()刪除最后一個元素
push_back(elem)在容器的末尾插入一個元素
resize(num)重新設置一個容器的大小
begin(),end()返回容器首尾元素的迭代器

新增兩個頭文件

#include <vector>
#include <algorithm>

vector 迭代器遍歷,sort, reverse,

int main(){// vector <double> vectDouble = {98.5, 67.9, 43.6, 32.9};  c++ 98 中不能初始化并賦初值vector <double> vectDouble;// 向數組中插入數字vectDouble.push_back(100.8);vectDouble.push_back(99.8);vectDouble.push_back(102.5);// 不專業輸出for(int i = 0; i < vectDouble.size(); i++){cout << vectDouble[i] << "\t";}// 集合的通用遍歷方法,使用迭代器 iteratorvector<double>::iterator it;  //定義一個vector<double>類型的迭代器, 實際上是一個指針for(it = vectDouble.begin(); it != vectDouble.end(); it++){cout << *it << "\t";}// 排序sort(vectDouble.begin(), vectDouble.end());for(it = vectDouble.begin(); it != vectDouble.end(); it++){cout << *it << "\t";}//逆序reverse(vectDouble.begin(), vectDouble.end());for(it = vectDouble.begin(); it != vectDouble.end(); it++){cout << *it << "\t";}return 0;
}

定義多大多大,push_back會/可以改變容量,但是效率不高。
當內存容量不夠的時候的應對機制:申請一塊更大的存儲區,將所有的元素放入到新的存儲區中。將舊的內存釋放掉。
建議vector中不要放復雜對象,要放指針。(這么處理的妙處??

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

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

相關文章

關于mysql的change和modify

前端時間要寫個游戲里的郵件系統&#xff0c;定義了一個如下的表結構&#xff1a; CREATE TABLE sysmail (mailid int(20) NOT NULL AUTO_INCREMENT,sendtime int(11) NOT NULL DEFAULT 0,mailtitle varchar(512) COLLATE utf8_bin NOT NULL DEFAULT ,mailcontext varchar(2048…

終于,我讀懂了所有Java集合——map篇

首先&#xff0c;紅黑樹細節暫時擼不出來&#xff0c;所以沒寫&#xff0c;承諾年前一定寫 HashMap &#xff08;底層是數組鏈表/紅黑樹&#xff0c;無序鍵值對集合&#xff0c;非線程安全&#xff09; 基于哈希表實現&#xff0c;鏈地址法。 loadFactor默認為0.75&#xff0…

valgrind工具使用詳解

zz自 http://blog.csdn.net/destina/article/details/6198443 感謝作者的分享&#xff01; 一 valgrind是什么&#xff1f; Valgrind是一套Linux下&#xff0c;開放源代碼&#xff08;GPL V2&#xff09;的仿真調試工具的集合。Valgrind由內核&#xff08;core&#xff09;以…

C++(9)--裸指針、智能指針、引用

指針1.裸指針的基本概念1.1 裸指針的聲明*/初始化&1.2 操作裸指針--間接運算符*1.3 裸指針使用 demo--指向一個簡單變量1.4 空指針--nullptr1.5 特殊指針--void *ptr2.指針和引用--引用定義&3.指針和數組3.1 數組指針的定義3.2 數組指針遞增/遞減操作3.3 指針與數組使用…

關于valgrind的安裝和內存泄露分析

程序的安裝 如果使用的是tar包安裝. valgrind # wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2 # tar -jxvf valgrind-3.9.0.tar.bz2 # cd valgrind-3.9.0 # ./autogen.sh # ./configure # make; make install 使用命令: valgrind --tool=memcheck --leak-…

關于mysql的cpu占用高的問題

現在游戲開了泰服 ,發現泰服的cpu占用率總是比繁體或者大陸的高很多,每次都是占用了300%多 top - 15:34:06 up 222 days, 2:51, 2 users, load average: 0.75, 0.73, 0.66 Tasks: 215 total, 1 running, 214 sleeping, 0 stopped, 0 zombie Cpu(s): 52.4%us, 8.5%…

網絡原理知識點匯總

OSI七層模型 vs. TCP/IP 五層模型&#xff08;有時候也說四層&#xff09;及各層協議 七層&#xff1a;物理層&#xff1a;為數據端設備提供傳送數據的通路&#xff0c; IEEE802 數據鏈路層&#xff1a;提供介質訪問和鏈路管理&#xff0c; ARP&#xff0c;MTU 網絡層&#xf…

無限踩坑系列(8)--猿界神猿

計算機一句話冷知識1.GNU2. Unix與C語言3. Linux與git-hub4. c/c 編譯器5. python1.GNU GNU是一個自由的操作系統&#xff0c;其內容軟件完全以GPL方式發布。 GNU&#xff1a;GNU’s Not Unix!的遞歸縮寫 Unix 商業化之后&#xff0c; RMS發起了GNU計劃&#xff0c;在該計劃下…

C++實現md5加密或計算文件的唯一性識別

由于網絡上傳了很多關于C實現md5加密的類&#xff0c;至于那個是原創&#xff0c;我不敢妄加猜測&#xff0c;只是這里我聲明我是轉載的&#xff0c;并支持原創。 對于md5加密算法&#xff0c;我提供兩文件&#xff1a; #ifndef MD5_H #define MD5_H #include <string>…

Crontab的格式

第1列分鐘1&#xff5e;59 第2列小時1&#xff5e;23&#xff08;0表示子夜&#xff09; 第3列日1&#xff5e;31 第4列月1&#xff5e;12 第5列星期0&#xff5e;6&#xff08;0表示星期天&#xff09; 第6列要運行的命令 下面是crontab的格式&#xff1a; 分 時 日 月 星期 要…

leetcode516 最長回文子序列

給定一個字符串s&#xff0c;找到其中最長的回文子序列。可以假設s的最大長度為1000。 示例 1: 輸入: "bbbab" 輸出: 4 一個可能的最長回文子序列為 "bbbb"。 示例 2: 輸入: "cbbd" 輸出: 2 一個可能的最長回文子序列為 "bb"。 …

C++(10)--動態分配內存new,程序的內存分配

動態分配內存1. 動態分配內存1.1使用new分配內存1.2使用delete釋放內存1.3使用new創建動態分配的數組2. 程序的內存分配3.數組與指針案例實踐4.二維數組與指針《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------…

社交app應用開發 客戶端+服務器源碼

原帖地址&#xff1a;http://www.devdiv.com/iOS_iPhone-想學習移動社交APP的童鞋有福了&#xff0c;圖文展示&#xff0c;附客戶端&#xff0c;服務端源碼。-thread-121444-1-1.html 想學習移動社交APP的童鞋有福了&#xff0c;圖文展示&#xff0c;附客戶端&#xff0c;服務…

leetcode83 刪除排序鏈表中的重復元素

給定一個排序鏈表&#xff0c;刪除所有重復的元素&#xff0c;使得每個元素只出現一次。 示例 1: 輸入: 1->1->2 輸出: 1->2 示例 2: 輸入: 1->1->2->3->3 輸出: 1->2->3 思路&#xff1a;判斷下一個是否相同即可。 /*** Definition for singl…

tcpdump的用法

第一種是關于類型的關鍵字&#xff0c;主要包括host&#xff0c;net&#xff0c;port, 例如 host 210.27.48.2&#xff0c;指明 210.27.48.2是一臺主機&#xff0c;net 202.0.0.0 指明 202.0.0.0是一個網絡地址&#xff0c;port 23 指明端口號是23。如果沒有指定類型&#xff0…

關于NFS服務器的原理總結和mount掛載

NFS 是Network File System的縮寫,即網絡文件系統。一種使用于分散式文件系統的協定,由Sun公司開發,于1984年向外公布。功能是通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位于服務器磁盤中的數據,是在類Unix系統間實現磁…

leetcode203 移除鏈表元素

刪除鏈表中等于給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val 6 輸出: 1->2->3->4->5 思路&#xff1a;就刪唄&#xff0c;注意第一個數可能會被刪 /*** Definition for singly-linked list.* public class ListNode {* …

不需要安裝max或者xcode的object C開發環境

有時候很多人在沒有mac開發機的時候&#xff0c;都想著安裝一個虛擬mac機&#xff0c;或者用codeblock去配置成一個OC開發環境&#xff0c;我之前在學習OC的時候就這么辦過&#xff0c;虛擬機卡的要死&#xff0c;codeblock本來就不是專門用來做OC開發的&#xff0c;還要自己弄…

leetcode338 比特位計數

給定一個非負整數 num。對于 0 ≤ i ≤ num 范圍中的每個數字 i &#xff0c;計算其二進制數中的 1 的數目并將它們作為數組返回。 示例 1: 輸入: 2 輸出: [0,1,1] 示例 2: 輸入: 5 輸出: [0,1,1,2,1,2] 進階: 給出時間復雜度為O(n*sizeof(integer))的解答非常容易。但你可…