欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于vector的常見用法詳解

 更新時間:2023年02月06日 10:56:58   作者:輝小歌  
這篇文章主要介紹了關于vector的常見用法詳解,vector本身可以作為數(shù)組使用,而且在一些元素個數(shù)不確定的場合可以很好地節(jié)省空間,本文給大家介紹的非常詳細,需要的朋友可以參考下

vector翻譯為向量,但是這里使用“變長數(shù)組”的叫法更容易理解,也即“長度根據(jù)需要而自動改變的數(shù)組”。在考試題中,有時會碰到只用普通數(shù)組會超內存的情況,這種情況使用vector會讓問題的解決便捷許多。另外, vector還可以用來以鄰接表的方式儲存圖,這對無法使用鄰接矩陣的題目(結點數(shù)太多)、又害怕使用指針實現(xiàn)鄰接表的讀者是非常友好的寫法也非常簡潔。

需要的頭文件:

#include <vector>

需要的其他東西:

using namespace std;

vector的定義

vector的定義的格式:

vector<typename> name;

上面這個定義其實相當于是一維數(shù)組name[ SIZE ],只不過其長度可以根據(jù)需要進行變化,
比較節(jié)省空間,說通俗了就是"邊長數(shù)組"。

和一維數(shù)組一樣,這里的typename 可以是任何基本類型,例如: int 、double 、char、結構體等,也可以是STL標準容器,
例如 vector 、set、queue等。需要注意的是,如果typename也是一個STL容器,定義的時候要記得在 >> 符號之間加上空格,
因為一些使用C++ 11之前標準的編譯器會把它視為移位操作,導致編譯錯誤。
例子:

#include<cstdio>
#include<vector>
using namespace std;
struct student
{
	int age;
	char name[20];	
};
int main(void)
{
	vector<int> a;
	vector<double> b;
	vector<char> c;
	vector<student> d;
	return 0;
} 

如果typename 是vector,就是下面這樣定義:

vector< vector<int> > name;//  >>之間要加空格

可以很容易聯(lián)想到二維數(shù)組的定義,即其中一維是一個數(shù)組的數(shù)組。那么二維vector數(shù)組也是一樣的,
即Arrayname[]中的每一個元素都是vector。
初學者可以把二維vector 數(shù)組當作兩個維都可變長的二維數(shù)組理解。

定義vector數(shù)組的方法:

vector<typename> Arrayname[arraySize];

這樣Arrayname[0] ~ Arrayname[ arraySize - 1 ] 中的每一個元素都是一個vector容器。

與vector<vector<int> > name 不同的是,這種寫法的一維長度已經(jīng)固定為arraySize,另一維才是"變長"的

vector容器內元素的訪問

vector一般有兩種訪問方式 , 通過下標訪問或通過迭代器訪問。

一、通過下標訪問

和訪問普通的數(shù)組是一樣的,對一個定義為vector vi 的容器來說
直接訪問vi[ index ] 即可(如vi[0]、vi[1])。當然這里的下標是從0 到 vi.size()-1。
訪問這個范圍外的元素可能會出錯。

二、通過迭代器訪問

迭代器( iterator ) 可以理解為一種類似指針的東西,其定義是:

vector<typename>::iterator it;  //可以迭代器就是定義一個 vector類型的指針

vector<typename>::iterator it;  //可以迭代器就是定義一個 vector類型的指針

這樣it 就是一個vector:: iterator型的變量,其中 typename 就是定義vector時填寫的類型。
下面是typename為int和 double 類型的舉例:

vector<int> ::iterator it;
vector<double> ::iterator it;

這樣就得到了迭代器it,并且可以通過 *it 來訪問vector里的元素

從這里可以看出 vi [ i ] 和 * ( vi.begin() + i )是等價的。
上面中的begin()函數(shù)的作用為 : 取 a的首元素地址。
end()函數(shù)是取a的尾元素地址的下一個地址。end()作為迭代器末尾標志,不存儲任何元素。

除此之外,迭代器還實現(xiàn)了兩種自加操作: ++it 和 it++
于是有了另一種遍歷vector中元素的寫法:

需要注意的是: vector的迭代器不支持 it < v1.end() 寫法,因此循環(huán)條件只能用 it != vi.end()

最后需要指出,在常用STL容器中,只有在vector和string中,才允許使用vi.begin()+3這種迭代器加上整數(shù)的寫法。

vector常用函數(shù)

(1) push_back()
顧名思義,push_back(x)就是在vector后面添加一個元素x,時間復雜度為O(1)。

(2) pop_back()
pop_back()用以刪除vector的尾元素,時間復雜度為O(1)。
注意: pop_back()函數(shù)是沒有參數(shù)的

(3) size()
size()用來獲得vector中元素的個數(shù),時間復雜度為O(1)。size()返回的是unsigned類型,
不過一般來說用%d不會出很大問題,這一點對所有STL容器都是一樣的。
例子:

(4) clear()
clear()用來清空vector中的所有元素,時間復雜度為O(N),其中N為vector中元素的個數(shù)。

(5) insert()
inesrt(it,x)用來向vector的任意迭代器it處插入一個元素x,時間復雜度O(N)。

(6)erase()
erase()有兩種方法: 刪除單個元素、刪除一個區(qū)間內的所有元素。時間復雜度都為O(N)。
①刪除單個元素
erase(it) 即刪除迭代器為it處的元素。

②刪除一個區(qū)間內的所有元素
erase(first,last)即刪除 [ first , last) 內的所有元素。

上面的說法可以直到,如果要刪除這個vector內的所有元素,
正確的寫法應該是v1.erase( v1.begin() , v1.end() )。
這正如前面說過,v1.end()就是尾元素地址的下一個地址。
當然,更方便的清空vector的方法是使用v1.clear()。

vector的常見用途

(1)存儲數(shù)據(jù)

  • vector本身可以作為數(shù)組使用,而且在一些元素個數(shù)不確定的場合可以很好地節(jié)省空間。
  • 有些場合需要根據(jù)一些條件把部分數(shù)據(jù)輸出在同一行,數(shù)據(jù)中間用空格隔開。
  • 由于輸出數(shù)據(jù)的個數(shù)不確定的,為了更方便地處理最后一個滿足條件地數(shù)據(jù)后面不輸出額外地空格,可以先用vector記錄所有需要輸出的數(shù)據(jù),然后一次輸出。

(2)用鄰接表存儲圖
使用vector實現(xiàn)鄰接表可以讓一些對指針不太熟悉的讀者有一個比較方便的寫法。

到此這篇關于vector的常見用法詳解的文章就介紹到這了,更多相關vector的常見用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++11學習之包裝器解析

    C++11學習之包裝器解析

    function包裝器?也叫作適配器。C++中的function本質是一個類模板,也是一個包裝器。本文就來和大家聊聊我們?yōu)槭裁葱枰猣unction呢
    2023-02-02
  • C++中用substr()函數(shù)消除前后空格的解決方法詳解

    C++中用substr()函數(shù)消除前后空格的解決方法詳解

    本篇文章是對C++中用substr()函數(shù)消除前后空格的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • c++模擬實現(xiàn)string類詳情

    c++模擬實現(xiàn)string類詳情

    這篇文章主要介紹了c++模擬實現(xiàn)string類詳情,string表示可變長的字符序列,使用string類型必須首先包含string頭文件。作為標準庫的一部分,string定義在命名空間std中,下面進入文章一起看看詳細內容吧
    2022-01-01
  • C++線程同步實例分析

    C++線程同步實例分析

    這篇文章主要介紹了C++線程同步實例分析,以實例的形式較為深入的分析了C++的線程同步問題,是一個較為經(jīng)典的線程同步問題,需要的朋友可以參考下
    2014-10-10
  • Qt在vs2019中使用及設置方法

    Qt在vs2019中使用及設置方法

    這篇文章主要介紹了Qt在vs2019中使用及設置方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Qt利用QChart實現(xiàn)實時波形圖的繪制

    Qt利用QChart實現(xiàn)實時波形圖的繪制

    這篇文章主要介紹了Qt如何利用QChart實現(xiàn)實時波形圖的繪制,文中的示例代碼講解詳細,對我們學習有一定是參考價值,需要的可以參考一下
    2022-06-06
  • OpenCV?直方圖均衡化的實現(xiàn)原理解析

    OpenCV?直方圖均衡化的實現(xiàn)原理解析

    直方圖均衡化是通過拉伸像素強度分布范圍來增強圖像對比度的一種方法,今天通過本文給大家介紹OpenCV?直方圖均衡化的實現(xiàn)原理解析,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • 一文詳解C++中的轉換構造函數(shù)

    一文詳解C++中的轉換構造函數(shù)

    在 C/C++ 中,不同的數(shù)據(jù)類型之間可以相互轉換,無需用戶指明如何轉換的稱為自動類型轉換(隱式類型轉換),需要用戶顯式地指明如何轉換的稱為強制類型轉換,本文就給大家詳細介紹一下C++的轉換構造函數(shù),需要的朋友可以參考下
    2023-09-09
  • C++淺析類與對象基礎點

    C++淺析類與對象基礎點

    類和對象是兩種以計算機為載體的計算機語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲在內存中—個可以擁有在某個范圍內的可變存儲區(qū)域
    2022-07-07
  • 淺談QT內存泄漏

    淺談QT內存泄漏

    本文主要介紹了淺談QT內存泄漏,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論