日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++顺序容器vector用法

發布時間:2025/6/15 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++顺序容器vector用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

順序容器概述

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

vector知識一覽

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

一、初步引入:

1、包含相應頭文件

#include<vector>
  • 1

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

using namespace std;
  • 1

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

二、容器操作

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

vector<int> vec;
  • 1

上面相當于創建了一個整形數組vec[],這是一個動態的數組。沒有指明數組大小。注意vector不是一種數據類型,而只是一個類模板。

2、對象的初始化,例如:

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

3、幾個重要操作,首先先建立一個vector對象

vector<int> vec;
  • 1

添加元素

  • vec.push_back(a) //在數組的最后添加一個數據a

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

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

刪除元素

  • vec.pop_back() //刪除數組的最后一個數據

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

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

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

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

vec向量的大小

  • vec.size() //返回容器中實際數據的個數。

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

獲取迭代器

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

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

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

  • vec.rend() //將vector反轉構的結束指針返回(其實就是原來的begin-1)

訪問vector中的數據

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

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

vector其他成員函數

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

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

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

  • vec.front() //傳回地一個數據。

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

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

聯系拓展

平時用到vector時候,很多情況下會涉及到排序的問題。對于C++的排序,c++標準庫里有排序函數。排序函數sort()就是最常用的。其在頭文件為:

#include<algorithm>
  • 1

sort()函數有3個參數:

  • 第一個是要排序的數組的起始地址

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

  • 第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時默認的排序方法是從小到大排序

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

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

定義排序比較函數:

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。