最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中vector<vector<int>?>的基本使用方法

 更新時間:2022年07月18日 11:24:46   作者:Ashley?zhao  
vector<vector<int>?>其實就是容器嵌套容器,外層容器的元素類型是vector<int>,下面這篇文章主要給大家介紹了關(guān)于C++中vector<vector<int>?>的基本使用方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

注意vector<vector<int> >后面的尖括號前面要加上空格,否則在有些編譯器出現(xiàn)問題

vector<vector<int>> A;//錯誤的定義方式
vector<vector<int> > A;//正確的定義方式

一、為什么是vector?

對于數(shù)組,大家常用索引和指針來操作數(shù)組,給程序設(shè)計帶來了很大的靈活性。但是數(shù)組的越界可能會引起程序的崩潰,而且動態(tài)性不好,包括動態(tài)改變大小,動態(tài)申請。有什么辦法可以解決這些問題嗎?

關(guān)于vector我不想多說,我假設(shè)大家都了解temlplate 和 STL比如map、list、vector等)。 學(xué)習(xí)C++的時候?qū)W到過STL(標(biāo)準(zhǔn)模板庫)知道vector提供了operator[]函數(shù)??梢韵駭?shù)組一樣的操作,而且還有邊界檢查,動態(tài)改變大小。vector本來就是可以用來代替一維數(shù)組的,vector提供了operator[]函數(shù),可以像數(shù)組一樣的操作,而且還有邊界檢查,動態(tài)改變大小。這里只介紹用它來代替二維的數(shù)組,二維以上的可以依此類推。

vector<vector<int> > array2(3);

array2可以保存3個向量,向量的長度是可以改變的。array2[i]返回的是第i個向量。同理,array2[i][j]返回的是第i個向量中的第j個元素。

   vector<vector<int>  > array2(3);
   array2[1][2]=9;

我保證你的程序會segement failed,原因就是你沒有指定向量的大小。用push_back函數(shù)可以解決問題,如下:

for(int i=0;i<3;i++)
   array2[i].resize(3);//就定義了一個3X3的數(shù)組了(另一個3在 申明時定義的)。而且你可以隨時改變它的大小

二、什么是vector?

向量(Vector)是一個封裝了動態(tài)大小數(shù)組的順序容器(Sequence Container)。跟任意其它類型容器一樣,它能夠存放各種類型的對象??梢院唵蔚恼J(rèn)為,向量是一個能夠存放任意類型的動態(tài)數(shù)組。

2.0 容器特性

1)順序序列

順序容器中的元素按照嚴(yán)格的線性順序排序??梢酝ㄟ^元素在序列中的位置訪問對應(yīng)的元素。

2)動態(tài)數(shù)組

支持對序列中的任意元素進(jìn)行快速直接訪問,甚至可以通過指針?biāo)闶鲞M(jìn)行該操作。操供了在序列末尾相對快速地添加/刪除元素的操作。

3)能夠感知內(nèi)存分配器的

容器使用一個內(nèi)存分配器對象來動態(tài)地處理它的存儲需求。

2.1. 基本操作

a. 頭文件#include<vector>

b. 創(chuàng)建vector對象:vector dp;

c. 尾部插入數(shù)字:vec.push_back(a);

d. 使用下標(biāo)訪問元素,cout<<dp[0]<<endl;記住下標(biāo)是從0開始的。

使用迭代器訪問元素.

vector::iterator it;
for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl;

e. 插入元素: vec.insert(vec.begin()+i,a);在第i個元素后面插入a;

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

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

h. 向量大小:vec.size();

g. 清空:vec.clear();//清空之后,vec.size()為0

2.2. 常見定義方法:

(1) vector<int> a(5); //定義了5個整型元素的向量(<>中為元素類型名,它可以是任何合法的數(shù)據(jù)類型),但沒有給出初值,其值是不確定的.

(2)vector<int> a(5,1);//定義了5個整型元素的向量,且給出每個元素的初值為1

(3)vector<int> a(b); //用b向量來創(chuàng)建a向量,整體復(fù)制性賦值

(4)vector<int> a(b.begin(),b.begin+3); //定義了a值為b中第0個到第2個(共3個)元素

(5)int b[7]={1,2,3,4,5,9,8}; vector<int> a(b,b+7); //從數(shù)組中獲得初值

2.3. 使用方法

2.3.1 創(chuàng)建一維vector:

vector<int>nums;//不指定長度
vector<int>nums(n); // 指定長度為n

添加元素

nums.push_back(1);//直接從數(shù)組末端添加
nums[i] = 1;//直接賦值給第i個位置

刪除元素

nums.resize(nums.size-i); //直接將數(shù)組長度減小,某種方式上刪掉了后面i個
nums.pop_back();//刪掉最后一個元素

數(shù)組遍歷

for(int i = 0; i < nums.size(); i++) cout<<nums[i]<<endl;

獲得長度

nums.size()

排序(O(nlogn))

sort(nums.begin(),nums.end());

翻轉(zhuǎn)

reverse(nums.begin(), nums.end());

合并兩個vector

合并nums1和nums2,并將合并后的數(shù)組賦值給nums

vector<int>nums1(m),nums2(n);
vector<int>nums;
nums.resize(m+n);
merge(nums1.begin(), nums1.end(),nums2.begin(),nums2.end(),nums);

2.3.2 定義二維vector

vector<vector<int> > v;

訪問二維vector的元素: 如果指定外層和內(nèi)層向量的大小,就可用operator[]進(jìn)行讀和寫;如果只指定外層向量大小,就能用push_back()函數(shù)進(jìn)行寫,不能用operator[]進(jìn)行讀和寫。

1). 創(chuàng)建m*n的二維vector:

vector<vector <int> >nums(m ,vector<int>(n)); //m*n的二維vector

定義了一個vector容器,元素類型為vector,初始化為包含m個vector對象,每個對象都是一個新創(chuàng)立的vector對象的拷貝,而這個新創(chuàng)立的vector對象被初始化為包含n個0。

vector(n)表示構(gòu)造一個無名且含n個0的vector對象。

2). 動態(tài)創(chuàng)建m*n的二維vector

方法一:

vector<vector <int> > nums;
nums.resize(m);
for(int i=0;i<m;i++) nums[i].resize(n);

方法二:

vector<vector <int> > nums;
nums.resize(m,vector<int>(n));

3).初始化二維數(shù)組

vector<vector `<int>` > nums(m ,vector`<int>`(n,0)); //m*n的二維vector,所有元素為0

獲得二維數(shù)組的行數(shù):nums.size();

獲得二維數(shù)組的列數(shù):nums[0].size()

4). 數(shù)組遍歷

int m = nums.size(),n = nums[0].size();
for(int i = 0; i < m; i++){
    for(int j = 0; j < n; j++){
        cout<<nums[i][j]<<endl;
    }
}

三、vector<int>指針形式比較

在使用STL容器(比如map、list、vector等)的時候,是用放一個對象還是放一個對象指針?

即是用vector還是vector<int*>,這里的vector可以換成其他的容器,int可以換成其他基本類型,也可以自定義的數(shù)據(jù)結(jié)構(gòu)或類。

1). vector不需要動態(tài)操作內(nèi)存,不用擔(dān)心內(nèi)存泄露等問題;vector<int*>要注意new和delete成對使用。

2). 當(dāng)int改變成其他類型或結(jié)構(gòu)或類的時候,用vector<int*>這種方式比較方便,容器里放的內(nèi)容占用的內(nèi)存也相對要少一些,指針在用的時候,去申請空間,不用,那就是個占用4個字節(jié)的地址。

3). 當(dāng)需要對變量不斷讀寫操作時,最好得用指針形式,僅僅通過傳遞指針加快了訪問速度。

vector<int>
vector<int> vecTemp;
for (int i=0; i< 10; i++)
{
    vecTemp.push_back(i);    //這種方式不需要動態(tài)new內(nèi)存,當(dāng)然也不用delete。
}
vector<int*>
vector<int*> vecTemp;
  for (int i=0; i< 10; i++)
  {
      int* nTemp = new int;
      *nTemp = i;
      vecTemp.push_back(nTemp);
  }

vector<int> *a;

當(dāng)使用這種vector指針時,指針a代表的是:不能通過a[i]訪問值,只可能通過a->at(i)訪問值。

四.幾種常見場景

4.1 vector<int>& nums

1) int &nums:一個整型變量的引用

2) vector nums:nums是一個容器變量,容器名稱為vector,容器內(nèi)存的數(shù)據(jù)為int型

3) vector &nums:nums為一個引用,引用的內(nèi)容是vector這個容器內(nèi)部存放的整型數(shù)據(jù)

//1) 創(chuàng)建一維vector
vector<int> nums; //不指定長度
vector<int> nums(n); //指定長度 
//2) 添加元素
nums.push_back(1); //直接在末端添加元素1
//3) 刪除元素
nums.resize(num.size-i); //刪除后面i個元素
nums.pop_back(); //刪除最后一個元素 
//4) 獲取長度
nums.size();
//5) 判空
nums.empty();

4.2 vector<int> nums

vector<int>& a;
vector<int> a;

說明: 帶&表示傳入函數(shù)的是vector的引用(即物理位置),函數(shù)內(nèi)部對vector改動,vector就會改變;
不帶&表示傳入的是vector的復(fù)制品(開辟了另一塊位置),函數(shù)內(nèi)部對其改動,不會影響原本的vector;

4.3 vector< vector<int> > v(m, vector<int>(n) );

定義了一個vector容器,元素類型為vector,初始化為包含m個vector對象,每個對象都是一個新創(chuàng)立的vector對象的拷貝,而這個新創(chuàng)立的vector對象被初始化為包含n個0。

從結(jié)果上看,類似于創(chuàng)建了一個m×n的二維數(shù)組,而且可以通過v[i][j]的方式來訪問元素(vector支持下標(biāo)訪問元素)。

4.4 vector< vector <int> > dp(m, vector<int>(n) )

vector<類型>標(biāo)識符(最大容量,初始所有值)

vector< vector<int> > v(m, vector<int>(n) );定義了一個vector容器,元素類型為vector,初始化為包含m個vector對象,每個對象都是一個新創(chuàng)立的vector對象的拷貝,而這個新創(chuàng)立的vector對象被初始化為包含n個0。

總結(jié)

到此這篇關(guān)于C++中vector<vector<int> >基本使用的文章就介紹到這了,更多相關(guān)C++ vector<vector<int> >用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C語言實現(xiàn)推箱子的基本功能(2)

    詳解C語言實現(xiàn)推箱子的基本功能(2)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)推箱子的基本功能的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++數(shù)組去重十種方法

    C++數(shù)組去重十種方法

    數(shù)組去重是一個常見的操作,本文主要介紹了C++數(shù)組去重十種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • C++使用宏函數(shù)實現(xiàn)單例模板詳解

    C++使用宏函數(shù)實現(xiàn)單例模板詳解

    在我們?nèi)粘i_發(fā)中,無可避免需要使用單例模式進(jìn)行設(shè)計類對象。這篇文章主要介紹了如何使用宏函數(shù)實現(xiàn)單例模板,感興趣的小伙伴可以了解一下
    2023-02-02
  • C++17中的折疊表達(dá)式實現(xiàn)

    C++17中的折疊表達(dá)式實現(xiàn)

    這篇文章主要介紹了C++17中的折疊表達(dá)式實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++實踐排序函數(shù)模板項目的參考方法

    C++實踐排序函數(shù)模板項目的參考方法

    今天小編就為大家分享一篇關(guān)于C++實踐排序函數(shù)模板項目的參考方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C++中的三種繼承public,protected,private詳細(xì)解析

    C++中的三種繼承public,protected,private詳細(xì)解析

    我們已經(jīng)知道,在基類以private方式被繼承時,其public和protected成員在子類中變?yōu)閜rivate成員。然而某些情況下,需要在子類中將一個或多個繼承的成員恢復(fù)其在基類中的訪問權(quán)限
    2013-09-09
  • 約瑟夫環(huán)問題(數(shù)組法)c語言實現(xiàn)

    約瑟夫環(huán)問題(數(shù)組法)c語言實現(xiàn)

    這篇文章主要介紹了約瑟夫環(huán)問題(數(shù)組法)c語言實現(xiàn),有需要的朋友可以參考一下
    2013-12-12
  • C++稀疏矩陣的各種基本運算并實現(xiàn)加法乘法

    C++稀疏矩陣的各種基本運算并實現(xiàn)加法乘法

    今天小編就為大家分享一篇關(guān)于C++稀疏矩陣的各種基本運算并實現(xiàn)加法乘法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C++ delete之靜態(tài)變量問題詳解

    C++ delete之靜態(tài)變量問題詳解

    這篇文章主要為大家詳細(xì)介紹了C++delete的一些問題,學(xué)習(xí)如何動態(tài)創(chuàng)建對象,動態(tài)創(chuàng)建的對象與一般對象的區(qū)別,動態(tài)創(chuàng)建的對象的初始化以及釋放動態(tài)分配的內(nèi)存等知識點,感興趣的朋友可以參考一下
    2021-09-09
  • c++ typeid關(guān)鍵字的使用

    c++ typeid關(guān)鍵字的使用

    這篇文章主要介紹了c++ typeid關(guān)鍵字的使用,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2020-11-11

最新評論

揭东县| 莎车县| 岑溪市| 苗栗县| 金川县| 金塔县| 若尔盖县| 德江县| 安顺市| 来凤县| 十堰市| 谷城县| 桃源县| 泰顺县| 如东县| 丹东市| 手游| 广宁县| 汶上县| 桃源县| 灵丘县| 临高县| 高淳县| 富宁县| 莱芜市| 佛坪县| 牡丹江市| 资中县| 盘锦市| 盐亭县| 朝阳市| 内黄县| 壤塘县| 呼和浩特市| 卓资县| 抚州市| 城口县| 黄龙县| 探索| 鄄城县| 南雄市|