1. 程式人生 > >C++STL技術原理淺析與應用基礎之vector

C++STL技術原理淺析與應用基礎之vector

C++STL技術原理淺析與應用基礎(一)

C++STL(c++標準庫),又稱泛型庫,是一個以模板技術實現各種資料結構(容器),演算法的通用程式庫。包括三個部分:容器,迭代器,演算法;容器有:vector(向量),deque(雙端佇列),list(雙向連結串列)等;迭代器就是一組訪問容器這些資料結構的指標,每個容器單獨定自己的迭代器;演算法包括sort(),for_each(),find()等。他們之間的關係為:演算法使用迭代器訪問容器。

我寫本文的目的知識只是為了記錄我的STL學習過程中的所想,所知,所感。加深自己對STL技術的理解,如果你有好的想法或者建議請聯絡我[email protected]

,願意與你共勉之。順便說一句,把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡,如果你已經決定了要看這篇文章,請保持一個虛心的態度,如果你不具備這條那就不用往下看了。

廢話不多說了……進入正題…….

一. vector的技術原理與應用基礎

vector是一種簡單,高效的向量容器。在尾端插入和刪除元素,時間複雜度為O(1),

其他位置的元素的插入和刪除時間複雜度為O(n).

先來看看vector的資料結構


Vector定義了三個指標變數訪問它的資料結構,M_start指向當前的起始位元組的位置,M_finish指向最後一個vector元素的末尾位元組處(就是最後一個元素的下一個元素),M_end_of_storage指向整個容器所佔的記憶體空間的末尾位元組處。

下面介紹vector容器的常用函式

begin()返回M_start指標,end()返回M_finish所以在區間[begin(),end()),就可以表示整個區間的所有值。

Vector提供的迭代器型別有:iterator,const_iterator,reverse_iterator,const_reverse_iterator四種後面程式中具現之。

1.   empty()判斷是否為空

2.   size_typezise()返回當前vector中的實際的元素個數

3.   size_typemax_size()返回標準庫給vector允許分配的最大元素個數

4.   size_typecapacity()返回當前可容納的vector元素的個數

5.   referencefront()返回當前vector首元素的引用,要求vector非空

6.   referenceback()返回當前vector末尾元素的引用,要求vector非空

7.   pop_back()用於從vector末尾刪除元素與push_back()相反

注:vector沒有push_front()和pop_front()要在任意位置插入元素用insert(iterator pos,int a)在pos前插入a。刪除指定元素用erase(iteratorpos),刪除指定區間的元素用erase(iterator first,iterator last)刪除[first,last)區間的元素。Clear呼叫erase()刪除[begin(),end())之間的所有元素,即清空vector。

以下程式碼是關於vector的簡單例項:

#include <iostream>

#include<vector>

using namespace std;

/* run this program using the console pauser or addyour own getch, system("pause") or input loop */

int main(int argc, char** argv) {

       vector<int>v;                 //定義vector

       v.push_back(8);               //放入資料

       v.push_back(4);

       v.push_back(7);

       v.push_back(8);

       v.push_back(0);

       v.push_back(6);

       v.push_back(5);

       v.push_back(5);

       v.push_back(7);

       vector<int>::iteratori,iend;//定義vector迭代器

       iend=v.end();

       cout<<"vector容器元素為:"<<endl;

       for(i=v.begin();i!=iend;i++)

       {

              cout<<*i<<endl;

        }

       vector<int>::reverse_iteratorri,riend;//定義vector反向迭代器

       riend=v.rend();

       cout<<"vector元素的反向迭代的結果為:"<<endl;

       for(ri=v.rbegin();ri!=riend;ri++)

       {

              cout<<*ri<<endl;

       }

       //各種函式的應用

       cout<<"首元素為:"<<v.front()<<endl;                   

       cout<<"元素個數為:"<<v.size() <<endl;

       cout<<"當前vector分配的空間為"<<v.capacity() <<endl;

       cout<<"標準庫給vector的空間為"<<v.max_size() <<endl;

       v.pop_back(); 

       cout<<"末尾元素為:"<<v.back()<<endl;

       v.reserve(30);//自定義vector當前分配空間的大小

       cout<<"從新分配空間後的大小為:"<<v.capacity() <<endl;

       //swap

       vector<int>v1;

       v1.push_back(6);

       swap(v1,v);

       vector<int>::iteratori1,iend1;

       iend1=v1.end();

       cout<<"交換後的v1為:"<<endl;

       for(i1=v1.begin();i1!=iend1;i1++)

       {

              cout<<*i1<<endl;

        }

       return 0;

}

總結一下,寫的很水……只是簡單的介紹了一下vector資料結構和基礎函式應用。vector的基本函式的細節實現以及vector記憶體分配機制沒有詳細寫,希望後面把vector的實現以及各種記憶體分配機制這一部分補上。

相關推薦

C++STL技術原理淺析應用基礎vector

C++STL技術原理淺析與應用基礎(一) C++STL(c++標準庫),又稱泛型庫,是一個以模板技術實現各種資料結構(容器),演算法的通用程式庫。包括三個部分:容器,迭代器,演算法;容器有:vector(向量),deque(雙端佇列),list(雙向連結串列)等;迭代器就是

C++ 標準模板庫STL multimap 使用方法應用介紹

C++ Multimaps和maps很相似,但是MultiMaps允許重複的元素。(具體用法請參考map容器) 函式列表: begin() 返回指向第一個元素的迭代器  clear() 刪除所有元素

基礎技術篇 8 —— iBeacon技術詳解應用

 iBeacon技術詳解與應用 1 名稱解釋 BLE:Bluetooth Low Energy,藍芽低功耗技術。 iBeacon:一種技術,基於藍芽4.0的精確定位技術。 Beacon:實現iBeac

C++ 標準模板庫STL set 使用方法應用介紹(一)

這次先看例子程式: #include <iostream> #include <set> #include <algorithm> #include <iterator> using namespace std; int

比特幣深層技術原理淺析

相對 頁碼 system 介紹 菜刀 上架 積極 各類 賬單 摘要: 這是一篇主要針對技術小白的文章。本文盡量使用通俗易懂但又不失要義的文字,帶你深入剖析當前備受追捧的比特幣背後的深層技術原理,最後會簡要介紹一下業界市場的現狀。 這是一篇主要針對技術小白的文章。本文盡量使用

Python程式設計:騰訊防水牆原理淺析Flask結合測試

騰訊防水牆 地址:https://007.qq.com/ 基本原理: 前端認證 + 後端認證 前端認證 前端引數: id : 元素的id(必須) data-appid : AppID(必須) data-cbfn : 回撥函式名(必須) data-biz-state : 業務自

公司簡介: Faceunity(杭州相芯科技有限公司)專注智慧圖形技術的創新與應用,為移動網際網路、VR/AR等領域提供3D內容生成互動的行業解決方案,致力於好萊塢特效技術在消費級應用的普及。 Fac

歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能拓展與語法支援,除了

pt-online-schema-change的原理解析應用說明

傳統方法修改表結構 類似alter table xx modify,在修改表結構時需要鎖表,如果表很大,則操作時間會較長。目前,絕大多數業務要求24*7無間斷服務,而此過程中,如果造成較長時間資料庫無法更新,則會嚴重影響業務。最近了解到兩種可行的方案:1.替換表結構方法,2.採用percona線上修

分散式快取技術原理 淺析 - 20181120

一.引言 快取是 分散式系統 中重要元件,主要解決資料高併發,大資料場景下,熱點資料訪問的效能安全問題,提供高效能的資料快速訪問。 快取的原理:將資料放到更快的儲存中、將資料快取到離應用最近的位置、將資料快取到離使用者最近的位置。 二.快取的流程(淺談) 1.

基礎設施應用監控指標、監控和報警簡介

概述 瞭解基礎設施和系統的狀態對於確保服務的可靠性和穩定性至關重要。有關部署的執行狀況和效能的資訊不僅可以幫助您的團隊對問題做出反應,而且還可以讓他們放心地進行更改。獲得這種洞察力的最佳方法之一是使用強大的監控系統,該系統收集指標,視覺化資料,並在事情出現故障時

基礎設施應用監控收集度量指標

概述 瞭解系統狀態對於確保應用程式和服務的可靠性和穩定性至關重要。有關部署的執行狀況和效能的資訊不僅可以幫助您的團隊對問題做出反應,而且還可以讓他們放心地進行更改。獲得這種洞察力的最佳方法之一是使用強大的監控系統,該系統可收集指標,視覺化資料,並在事情出現故障時

【FFMpeg視訊開發應用基礎】八、 呼叫FFMpeg SDK實現視訊縮放

《FFMpeg視訊開發與應用基礎——使用FFMpeg工具與SDK》視訊教程已經在“CSDN學院”上線,視訊中包含了從0開始逐行程式碼實現FFMpeg視訊開發的過程,歡迎觀看!連結地址:FFMpeg視訊開發與應用基礎——使用FFMpeg工具與SDK

機器學習演算法原理總結系列---演算法基礎(13)模糊C均值聚類(Fuzzy C-means Clustering)

筆者在韓國Chonnam National University攻讀碩士學位,FCM演算法是professer Lim在這學期主要授課的內容,他說他剛發一篇FCM結合遺傳演算法還有各種腦電訊號處理,搭建分析AD病人的EEG訊號的計算智慧模型。反正就是各種難

“區塊鏈原理設計應用“”讀書筆記

區塊鏈思想的誕生:區塊鏈技術具備去中心化、防篡改、可追溯等眾多金融領域十分需要的特點。實現多方場景下開放、扁平化的全新合作信任模型,而這些都為實現更高效的資源配置,更具體的說是金融交易,提供有效的技術手段。新型數字貨幣、分散式賬本技術的支付系統。在清算和結算方面獨特優勢。挑戰

libco協程庫原理解析應用

       最近在準備一個libco協程庫原理簡析與應用的分享,順便就整理下寫個部落格,一方面加深下自己對協程庫的理解,另一方面也希望能對想了解協程的學者有所幫助。廢話不多說了,言歸正傳吧。        想去剖析libco協程庫的實現原理,首先我們要了解下什麼是協程。維基

【FFMpeg視訊開發應用基礎】一、使用FFmpeg命令列工具和批處理指令碼進行簡單的音視訊檔案編輯

《FFMpeg視訊開發與應用基礎——使用FFMpeg工具與SDK》視訊教程已經在“CSDN學院”上線,視訊中包含了從0開始逐行程式碼實現FFMpeg視訊開發的過程,歡迎觀看!連結地址:FFMpeg視訊開發與應用基礎——使用FFMpeg工具與SDK

【FFMpeg視訊開發應用基礎】五、呼叫FFMpeg SDK封裝音訊和視訊為視訊檔案

《FFMpeg視訊開發與應用基礎——使用FFMpeg工具與SDK》視訊教程已經在“CSDN學院”上線,視訊中包含了從0開始逐行程式碼實現FFMpeg視訊開發的過程,歡迎觀看!連結地址:FFMpeg視訊開發與應用基礎——使用FFMpeg工具與SDK

C++STL中的tuple pair (piecewise construction)

tuple<int, float> t(1, 2.22);     pair<int, Foo> p1(42, t);    pair<int, Foo> p2(piecewise_construct_t, make_tuple(32),

OCR原理淺析應用場景

  OCR原理淺析 從整體上來說,OCR一般分為兩個大步驟:影象處理以及文字識別。 參考:OCR 技術淺析         OCR應用場景 OCR是技術,基於OCR的應用場景就非常多了。比如:ocr綜合文

.NET基礎拾遺(7)Web Service的開發應用基礎

一、SOAP和Web Service的基本概念   Web Service基於SOAP協議,而SOAP本身符合XML語法規範。雖然.NET為Web Service提供了強大的支援,但瞭解其基本機制對於程式設計師來說仍然是必需的。 1.1 神馬是SOAP協議?   SOAP協議的全稱是簡單物件訪問協議