C++ vector 容器浅析 | 菜鸟教程

一、是什么vector?

航向(Vector)是一任一某一封装了静态浆糊大楼的次压紧(Sequence 压紧)。像普通的别的典型的压紧同样地,它可以贮存各式各样的典型的瞄准。。轻易思前想后,航向是一任一某一静态大楼,可以贮存在普通的典型中。。


二、压紧特点

1。序列序列

次压紧正中鹄的元素按严谨的的一次的次排序。。可以经过元素的职位增长有关的的元素。。

2。静态大楼

伴奏对序列中普通的元素的紧紧地和径直地增长。,甚至可以经过掌管满足控制。。在E中对元素的绝对紧紧地添加/迅速离开的控制。

三。可以认识内存分发者(分发者意识到)

压紧运用内存分发者瞄准来静态处置其贮存。。


三、根本效能赚得

1。证实作用

  • vector():准备一任一某一空vector
  • vector(int nSize):准备一任一某一vector,元素的本利之和是nSead
  • vector(int nSize,const t& t):准备一任一某一vector,元素的本利之和是nSead,值是t
  • vector(const vector&):复制品证实作用
  • vector(begin,完毕:复制品[开端],end)区间内另一任一某一大楼的元素到vector中

2。附加作用

  • void push_back(const T& x):元素x被添加到航向的搭上。
  • iterator 拔出(迭代器) it,const T& x):航向正中鹄的迭代器在落到t先发制人将元素添加到x中。
  • iterator 拔出(迭代器) it,int n,const T& X):航向正中鹄的迭代器在落到
  • iterator 拔出(迭代器) it,const_iterator first,const_iterator last):航向中迭代器落到元素前拔出另一任一某一平稳的典型航向的[first,创纪录的私下的决赛一次)

三。迅速离开作用

  • iterator 抹音(迭代器) 迅速离开航向正中鹄的迭代器落到元素
  • iterator 抹音(迭代器) first,iterator 决赛):迅速离开航向正中鹄的概要的任一某一,决赛的元素)
  • void POPYBACK():迅速离开航向正中鹄的决赛一任一某一元素
  • void 整顿():空航向正中鹄的一切元素

4。遍历作用

  • reference AT(int) 恢复POS职位元素的援用
  • reference 前():对概要的任一某一元素的援用
  • reference 恢复():援用尾元素
  • iterator 开端():恢复航向头掌管,落到概要的任一某一元素
  • iterator 完毕():恢复到航向尾掌管,落到航向的决赛一任一某一元素的下一任一某一职位。
  • reverse_iterator Rbegin():反向迭代器,落到决赛一任一某一元素
  • reverse_iterator RAND():反向迭代器,概要的元素先发制人的职位

5。判别作用

  • bool empty() 判别航向可能的选择为空,以防它是空的,航向中心不在焉元素

6。上浆作用

  • int size() const回归航向正中鹄的元素编号
  • int capacity() Const:恢复以后航向张宏的最大元素值。
  • int max_size() const:恢复最大可容许的vector元素本利之和值

7。别的效能

  • void swap(vector&):好转两个同典型航向的创纪录的
  • void 诊断(int) n,const T& x):集中航向正中鹄的n个元素的值是x
  • void assign(const_iterator first,const_iterator 决赛):[航向正中鹄的概要的任一某一],决赛的元素)设置成以后航向元素

8。看光滑的

在大楼末了添加创纪录的

迅速离开大楼的决赛创纪录的

购置物编号职位的创纪录的

获取大楼头的掌管

获取大楼的决赛一任一某一单元的掌管, 1

6.front 获取大楼头的援用

对大楼决赛一任一某一单位的援用。

通行vector最大可以是多大

以后vector分派的浆糊

以后运用创纪录的的浆糊

更改以后创纪录的的浆糊,以防它比以后运用的要大,填写Windows 默认值

更改以后VECoTR分派的空白的的浆糊

迅速离开掌管指向式的的创纪录的项

清空以后的vector

15.rbegin 将vector推翻后的开端掌管恢复(实则执意原先的end-1)

将vector推翻构的完毕掌管恢复(实则执意原先的begin-1)

判别vector可能的选择为空

与另一任一某一vector好转创纪录的


四、根本用法

#include < vector> 
using namespace std;

五、简略引见

  1. Vector<典型>编号
  2. Vector<典型>编号(最大满足)
  3. Vector<典型>编号(最大满足),初始一切值)
  4. Int i[5]={1,2,3,4,5}
    Vector<典型>VI(I),i 2);/ /在i提供线索为3然后购置物值
  5. Vector< vector< int> >v; 二维航向//嗨最外的<>想要空格。要不,它不克不及在旧编译程序下前进。

要求

推进运动(EELM)要求在CON的终止移除和拔出创纪录的。

要求

#include<string.h>#include<vector>#include<iostream>usingnamespacestd;

intmain(){vector<int>obj;for(inti=0;i<10;i++){obj.push_back(i);
cout<<obj[i]<<,;
}for(inti=0;i<5;i++){obj.pop_back();
}cout<<\n<<endl;

for(inti=0;i<obj.size();i++){cout<<obj[i]<<,;
}return0;
}

出口结出果实为:

0,1,2,3,4,5,6,7,8,9,

0,1,2,3,4,

整顿压紧正中鹄的创纪录的

要求

#include<string.h>#include<vector>#include<iostream>usingnamespacestd;

intmain(){vector<int>obj;
for(inti=0;i<10;i++){obj.push_back(i);
cout<<obj[i]<<,;
}obj.clear();for(inti=0;i<obj.size();i++){cout<<obj[i]<<endl;
}return0;
}

出口结出果实为:

0,1,2,3,4,5,6,7,8,9,

三。搭配

要求

#include<string.h>#include<vector>#include<iostream>#include<algorithm>usingnamespacestd;

intmain(){vector<int>obj;

obj.push_back(1);
obj.push_back(3);
obj.push_back(0);

sort(obj.begin(),obj.end());cout<<从小到大:<<endl;
for(inti=0;i<obj.size();i++){cout<<obj[i]<<,;
}cout<<\n<<endl;

cout<<由大到小<<endl;
reverse(obj.begin(),obj.end());for(inti=0;i<obj.size();i++){cout<<obj[i]<<,;
}return0;
}

出口结出果实为:

从小到大:
0,1,3,

由大到小
3,1,0,

1。小心 sort 必要头纸 #include

2。以防你以为 sort 来降序排列,可重写 sort

bool 匹敌(int) a,int b) 
{ 
    return a< b; //升序排列,以防改为return a>b,则为降序排列 
} 
int a[20]={2,4,1,23,5,76,0,43,24,65},i; 
(I=0;I)<20;i++) 
    cout<< a[i]<< endl; 
sort(a,a+20,compare);

4。增长(径直地大楼增长和迭代器增长)

要求

#include<string.h>#include<vector>#include<iostream>#include<algorithm>usingnamespacestd;

intmain(){vector<int>obj;
for(inti=0;i<10;i++){obj.push_back(i);
}cout<<"大楼的径直地运用:";
for(inti=0;i<10;i++){cout<<obj[i]<<"";
}cout<<endl;
cout<<"运用迭代器:" ;
vector<int>::iteratorit;for(it=obj.begin();it!=obj.end();it++){cout<<*it<<"";
}return0;
}

出口结出果实为:

大楼的径直地运用:0 1 2 3 4 5 6 7 8 9 
运用迭代器:0 1 2 3 4 5 6 7 8 9

5。二维大楼的两种规定(平稳的的结出果实)

办法一

#include<string.h>#include<vector>#include<iostream>#include<algorithm>usingnamespacestd;

intmain(){intN=5, M=6;
vector<vector<int> > obj(N); for(inti =0; i< obj.size(); i++){obj[i].resize(M);
}for(inti=0; i< obj.size(); i++){for(intj=0;j<obj[i].size();j++){cout<<obj[i][j]<<"";
}cout<<"\n";
}return0;
}

办法二

#include<string.h>#include<vector>#include<iostream>#include<algorithm>usingnamespacestd;

intmain(){intN=5, M=6;
vector<vector<int> > obj(N, vector<int>(M)); for(inti=0; i< obj.size(); i++){for(intj=0;j<obj[i].size();j++){cout<<obj[i][j]<<"";
}cout<<"\n";
}return0;
}

出口结出果实为:

0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 

原文地址:

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注