STL中vector小結

来源:http://www.cnblogs.com/shouce/archive/2016/05/30/5541070.html
-Advertisement-
Play Games

...


(1)使用vector之前必須包含頭文件<vector>:#include<vector>

(2)namespace std{
     template <class T,
               class Allocator = allocator<T> >
     class vector;    
    }
vector的元素可以是任意類型T,但必須具備assignable和copyable兩個性質。第二個template參數可有可無,用來定義記憶體模型,預設的模型是C++標準程式庫提供的allocator。

(3)在末端附加或刪除元素時,vector的性能相當好。可是如果你在前端或中部安插或刪除元素,性能就不怎麼樣了,因為操作點之後的每一個元素都必須移動到另一個位置,而每一次移動都得調用assignment操作符

(4)vector性能優異的秘籍之一就是配置比其所容納的元素所需更多的記憶體。當vector申請的記憶體被用盡時,vector會重新申請一片新的記憶體,通常新申請的記憶體會是原來記憶體的兩倍.一旦記憶體重新配置,和vector元素相關的所有references,pointers,iterators都會失效

(5)vector的各項操作:
vector<Elem> c      產生一個空vector
vector<Elem> c1(c2)      產生另一個同型vector的副本
vector<Elem> c(n)      利用元素的default構造函數生成一個大小為n的vector
vector<Elem> c(n, elem)      產生一個大小為n的vector,每個元素值都是elem
vector<Elem> c(beg, end)      產生一個vector,以區間[beg, end)作為元素初值
c.~vector<Elem>()      銷毀所有元素並釋放記憶體

c.size()      返回當前的元素數量
c.empty()      判斷vector是否為空
c.max_size()      返回可容納的元素最大數值
c.capacity()      返回重新分配空間前所能容納的元素最大數量
c.reserve()      如果容量不足,擴大之
c1 compare c2      compare可為==,!=,<,>,<=和>=

c1 = c2      將c2全部元素賦值給c1
c.assign(n, elem)      複製n個elem,賦值給c
c.assign(beg, end)      將區間[beg, end)內的元素賦值給c
c1.swap(c2)      將c1和c2元素互換

c.at(idx)      返回索引idx所標示的元素,如果idx越界則拋出out_of_range異常
c[idx]      返回索引idx所標示的元素,不進行範圍檢查
c.front()      返回第一個元素,不檢查元素是否存在
c.back()      返回最後一個元素,不檢查元素是否存在

c.begin()      返回一個隨機存取迭代器,指向第一個元素
c.end()      返回一個隨機存取迭代器,指向最後元素的下一個位置
c.rbegin()      返回一個逆向迭代器,指向逆向迭代的第一個元素
c.rend()      返回一個逆向迭代器,指向逆向迭代的最後元素的下一個位置
vector迭代器持續有效,除非發生兩種情況:(1)使用者在一個較小的索引位置上安插或移除元素(2)由於容量的變化而引起記憶體的重新分配

c.insert(it, elem)      在it位置上插入一個elem副本並返回新元素的位置
c.insert(it, n, elem)      在it位置上插入n個elem副本,無返回值
c.insert(it, beg, end)      在it位置上插入區間[beg, end)內的所有元素副本,無返回值
c.push_back(elem)      在尾部添加一個elem副本
c.pop_back()      移除最後一個元素(但不回傳)
c.erase(it)      移除it位置上的元素,返回下一個元素的位置
c.erase(beg, end)      移除[beg, end)區間內的所有元素,返回下一個元素的位置
c.resize(num)      將元素數量改為num(如果size()變大了,多出來的新元素都需以default構造函數構造完成)
c.resize(num, elem)      將元素數量改為num(如果size()變大了,多出來的新元素都是elem的副本)
c.clear()      將容器清空

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們首先從創建ASP.NET MVC項目開始。打開Visual Studio,在文件菜單中選擇新建-> 項目,然後在模板中選擇Web,接著選擇ASP.Net Web應用程式,更改項目名稱,點擊確定,接著選擇ASP.NET 4.5.2模板為Empty,勾選核心引用MVC,確定,然後一個ASP.NET ...
  • 在上一篇文章中,我們已經學到了很基本的MEF概念和使用方法。 但我們導出的是一個object類型的實例,只能用來tostring,沒有引用部件類庫,也不能用裡面的成員方法。 本篇,我們逐漸往簡單的文件管理器的目標靠攏。 新建類庫IPart,添加一個介面IFileHandler.cs Parts類庫和 ...
  • 上一篇我們已經獲得了制定類型的實例,但我們還無法對其進行有效的控制。 我們用ExportMetadata屬性可以對具體的某個實例做標記,相當於命名。這麼理解不知道對否。 在IPart項目中添加一個介面IPatMetadata 在導出的地方添加具體的導出元數據ExportMetadata,以txtFi ...
  • 1、創建線程的一種簡單方法是定義一個委托,並非同步調用它。 增加代碼中第17行的Sleep方法的參數值,輸出的星號的個數會減少,反之會增加。 運行結果: 2、IAsyncResult有一個名字叫AsyncWaitHandle的屬性,該屬性的類型是WaitHandle類。該類的WaitOne方法會“將一 ...
  • 分別向Set集合以及List集合中添加“A”,“a”,“c”,“C”,“a”5個元素,觀察重覆值“a”能否在List集合以及Set集合中成功添加。 運行: ...
  • 使用源文件 現在讓我們重新開始編程。當你學習一種新的編程語言的時候,你編寫運行的第一個程式通常都是“Hello World”程式,這已經成為一種傳統了。在你運行“Hello World”程式的時候,它所做的事只是說聲:“Hello World”。正如提出“Hello World”程式的Simon C ...
  • 開發PHP的朋友都知道,其實最擔心的就是程式中出現一些異常或錯誤,這些狀況如果輸出到用戶的螢幕會把用戶給嚇壞,甚至為此丟了工作,如果不輸出到螢幕就得想辦法記錄到日誌中,但是似乎不是每個人都有查看錯誤日誌的習慣,爲瞭解決這個尷尬的問題,所以我寫了這段代碼,其用意就是當我們寫的php程式出錯的時候把錯誤 ...
  • 首先,移位運算符有三種,其操作類型只支持:byte / short / char / int和long五種。 << 左移運算符,表示將左邊的操作數的二進位數據向左移動*位,移動後空缺位以0填充,多餘位捨棄。(等同於乘2的n次方) >> 右移運算符,二進位數據向右移動*位,就在其二進位數據後抹掉幾位? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...