日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

c++顺序容器vector用法

發(fā)布時(shí)間:2025/6/15 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++顺序容器vector用法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

順序容器概述

一個(gè)容器就是一些特定類型的集合。順序容器為程序員提供了控制元素存儲(chǔ)和訪問順序的能力。這種順序不依賴元素的值,而是與元素加入容器時(shí)的位置相對(duì)應(yīng)。所有的順序容器都提供了快速訪問元素的能力。順序容器類型有幾種:vector、deque、list、forward_list、array、string。在C++vector容器應(yīng)該是最常用的,使用vector是最好的選擇,下面我們就來講講他的一些用法。

vector知識(shí)一覽

簡單地說,vector是一個(gè)能夠存放任意類型的動(dòng)態(tài)數(shù)組,能夠增加和壓縮數(shù)據(jù)。因?yàn)槭莿?dòng)態(tài)數(shù)組,當(dāng)程序員無法知道自己需要的數(shù)組的規(guī)模多大時(shí),用其來解決問題可以達(dá)到最大節(jié)約空間的目的。vector也是一個(gè)類模板(class template)。模板允許程序員編寫單個(gè)類或函數(shù)定義,這個(gè)類和函數(shù)定義可用于不同的數(shù)據(jù)類型上。因此,我們可以定義保存string對(duì)象的vector,或保存int值的vector,又或是保存自定義的類類型對(duì)象(如Sales_item對(duì)象)的vector。首先要使用vector,我們必須知道他是在哪里聲明的,以及他在什么域里面。

一、初步引入:

1、包含相應(yīng)頭文件

#include<vector>
  • 1

2、vector屬于std命名域,使用全局命名域方式

using namespace std;
  • 1

或者使用 using std::vector;?
vector容器提供了很多接口,在下面的表中列出vector容器操作。

二、容器操作

1、創(chuàng)建vector對(duì)象,必須說明vector保存何種對(duì)象的類型,通過將類型放在類模板名稱后面的尖括號(hào)中來指定類型,類型可以是用戶自己定義的類型,也可以是常見類型,例如:

vector<int> vec;
  • 1

上面相當(dāng)于創(chuàng)建了一個(gè)整形數(shù)組vec[],這是一個(gè)動(dòng)態(tài)的數(shù)組。沒有指明數(shù)組大小。注意vector不是一種數(shù)據(jù)類型,而只是一個(gè)類模板。

2、對(duì)象的初始化,例如:

vector<int> vec;//默認(rèn)構(gòu)造函數(shù)vec為空 vector<int> vec1(vec);//vec1是vec的一個(gè)副本 vector<int> vec2(10,1);//10個(gè)int型元素,每個(gè)都初始化為1 vector<string> vec3(10);//10個(gè)string型元素,每個(gè)都是空string
  • 1
  • 2
  • 3
  • 4

3、幾個(gè)重要操作,首先先建立一個(gè)vector對(duì)象

vector<int> vec;
  • 1

添加元素

  • vec.push_back(a) //在數(shù)組的最后添加一個(gè)數(shù)據(jù)a

  • vec.insert(pos,elem) //在pos位置插入一個(gè)elem拷貝,傳回新數(shù)據(jù)位置

  • vec.insert(vec.begin()+i,a);在第i+1個(gè)元素前面插入a;

刪除元素

  • vec.pop_back() //刪除數(shù)組的最后一個(gè)數(shù)據(jù)

  • vec.erase(pos) //刪除pos位置的數(shù)據(jù),傳回下一個(gè)數(shù)據(jù)的位置

  • vec.erase(vec.begin()+2);刪除第3個(gè)元素

  • vec.erase(vec.begin()+i,vec.end()+j);刪除區(qū)間[i,j-1];區(qū)間從0開始

  • vec.clear() //刪除vec中所有元素,返回void

vec向量的大小

  • vec.size() //返回容器中實(shí)際數(shù)據(jù)的個(gè)數(shù)。

  • vec.empty() //判斷vector是否為空,里面有數(shù)據(jù)返回false,否則返回true

獲取迭代器

  • vec.begin() //返回vec的首元素

  • vec.end() //返回尾元素之后元素的位置,即最后一個(gè)單元+1的指針

  • vec.rbegin() //將vector反轉(zhuǎn)后的開始指針返回(其實(shí)就是原來的end()-1)

  • vec.rend() //將vector反轉(zhuǎn)構(gòu)的結(jié)束指針返回(其實(shí)就是原來的begin-1)

訪問vector中的數(shù)據(jù)

  • 第一種方式 vec.at(index) //函數(shù)和[]函數(shù)使用可以說是一模一樣. 都是為了訪問對(duì)應(yīng)index中存儲(chǔ)的數(shù)據(jù), 如果index大于vector的size. 兩者都是拋出out_of_range的exception.

  • 第二種方式 vector::operator[]?
    operator[]主要是為了與C語言進(jìn)行兼容。它可以像C語言數(shù)組一樣操作,由于operator[]容易造成一些錯(cuò)誤,所有我們很少用它

vector其他成員函數(shù)

  • vec.assign(beg,end) //將[beg; end)區(qū)間中的數(shù)據(jù)賦值給c。

  • vec.assign(n,elem) //將n個(gè)elem的拷貝賦值給c。

  • vec.back() //傳回最后一個(gè)數(shù)據(jù),不檢查這個(gè)數(shù)據(jù)是否存在。

  • vec.front() //傳回地一個(gè)數(shù)據(jù)。

  • vec.swap(b) //交換vec和b中元素

  • swap(a,b) //和vec.swap(b)一樣

聯(lián)系拓展

平時(shí)用到vector時(shí)候,很多情況下會(huì)涉及到排序的問題。對(duì)于C++的排序,c++標(biāo)準(zhǔn)庫里有排序函數(shù)。排序函數(shù)sort()就是最常用的。其在頭文件為:

#include<algorithm>
  • 1

sort()函數(shù)有3個(gè)參數(shù):

  • 第一個(gè)是要排序的數(shù)組的起始地址

  • 第二個(gè)是結(jié)束的地址(最后一位要排序的地址)

  • 第三個(gè)參數(shù)是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個(gè)參數(shù),此時(shí)默認(rèn)的排序方法是從小到大排序

sort(vec.begin(),vec.end());(默認(rèn)是按升序排列,即從小到大)。

如果我們想按照自己方法排序,那么我們可以通過重寫排序比較函數(shù)按照降序比較,例如按照降序排序,如下:

定義排序比較函數(shù):

bool Compare(const int &a,const int &b)?
{?
return a>b;?
}?
調(diào)用時(shí):sort(vec.begin(),vec.end(),Compare),這樣就降序排序。

總結(jié)

以上是生活随笔為你收集整理的c++顺序容器vector用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。