你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

vector知识详解

[复制链接]
gaosmile 发布时间:2020-10-5 21:42

一、vector基本概念:

1、功能:

vector数据结构和数组非常相似,也称为单端数组。

2、vector和普通数组的区别:

不同之处在于数组是静态空间,而vector是可以动态扩展的。动态扩展它并不是在原空间之后持续新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,释放原空间。

微信图片_20201005214118.png

注:上图中的push_back()和pop_back()函数分别表示往容器里面插入数据和从容器中拿走数据;begin()和end()是我们稍后会用到的迭代器

3、vector容器的迭代器是支持随机访问的迭代器。

二、vector构造函数

1、功能:

创建vector容器

2、函数原型:

  • vectorv;//采用模板实现类,默认构造函数

  • vector(v.begin(),v.end());//将v[begin(),end())区间中的元素拷贝给本身,注意是左闭右开

  • vector(n,elem);//构造函数n个elem拷贝给本身

  • vector(const vector &vec);//拷贝构造函数


    - R- y2 Q5 P1 U- `

代码应用:

#include <iostream>5 ]' m0 e" k4 n6 z0 p+ _" B
#include <vector>
1 O2 K* D. H! Q$ v, |  s0 N* xusing namespace std;
2 {1 t* l" h% N% e5 c- L//输出打印
) P' p& C' a" i# |; T* l' ivoid print(vector<int>&v)
' A  m$ R2 s/ V% |- p9 D{! f+ b6 o" X" R# a" p
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
3 z3 K9 W8 }8 S, C   {) g2 Z+ r0 Q- \  I9 \
       cout<<*it<<" ";
, r8 g6 ?; v0 U2 b   }; d/ E0 x- I: R! i6 j; Y
   cout<<endl;
# c. R& G: L9 c, ?/ @}9 \) Y4 Q/ j2 T4 ~. l7 ^
  //vector容器构造) D2 p; }& C) Y. f4 v
void test()
" ?; l, Q  T. ~0 i6 k{% J3 ]; M1 u1 I5 O! U
    vector<int>v1;: R% x0 m4 H! K2 H# ^, ]

3 j( D! B6 w5 h, x6 F2 l1 \    for(int i =0; i<10;i++)
' [9 v! v* f5 |& u8 N- r3 {9 L    {
, v7 e* ?) ~) a% D; V& W       v1.push_back(i);- }" P) L/ L" r& m1 ]9 v; m4 Q! q7 A
    }9 i. Q- `5 i( I$ k
    print(v1);; I" v* r( F9 V. K. `, g
   //通过区间方式进行构造: e6 m7 N) a' k" y
    vector<int>v2(v1.begin(),v1.end());% e" c' \6 `# r6 b
    print(v2);9 M- S2 s( z5 ]/ |: ~) s
   //n个elem方式构造. O, H; {) [& H7 P. I* u4 b
    vector<int>v3(10,100);
/ u9 e/ }  a0 ]- U" \# @" A- d* r    print(v3);
+ O$ w, n1 ?/ n1 A' B+ @* T% E   //拷贝构造
, c0 J7 ~5 Q+ {2 z, f. d    vector<int>v4(v3);9 Z, U; f4 ?# o5 r7 @
    print(v4);
8 c3 `# o& x2 u  E6 N8 f6 x' H' s  c  r( l
}: z( b- L8 s* R
int main()
" q4 j! t0 n" G* d7 z{9 ~) B+ h  Z, m- H  A
  test();
7 Y6 x, T  |2 K3 D6 o2 K}
7 i2 Z5 S% E  `3 i9 X
6 {. ^& |) d' {* y- H

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out' n% M% ~8 e! Z9 e0 A
0 1 2 3 4 5 6 7 8 9 , G4 `! u  j$ \0 f
0 1 2 3 4 5 6 7 8 9 , L! p8 F9 k% q$ B  ~
100 100 100 100 100 100 100 100 100 100
2 Q/ H* Z" g5 y* ~8 m2 E2 N+ W100 100 100 100 100 100 100 100 100 100 ; L/ g5 A$ D! q, c8 M$ N

/ _" M8 V7 v. O/ F" c: B

三、vector赋值操作:

1、功能描述:

给vector容器进行赋值

2、函数原型:

  • vector& operator=(const vector &vec);//重载等号操作符

  • assign(beg,end);//将[beg,end)区间中的数据拷贝赋值给本身

  • assign(n,elem);//将n个elem拷贝赋值给本身

    2 B# W, N( A: t, Y& R: V

代码应用:

#include <iostream>
8 Z1 [: R* p9 \  k! e#include <vector>3 }- J3 I4 O+ X+ g
using namespace std;- X( \; k5 V9 q% g' d& e+ L5 S" w
5 E% c5 {7 B! j- G
void print(vector<int>&v)0 C% s: Z+ x* F
{, [" H" P2 i8 ^2 `- J, S) R
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
7 |; ^6 |" L' ]   {* w( }7 U, J6 E8 n
       cout<<*it<<" ";
) C* x# z- U4 S4 Z- ~2 h   }7 n8 i& ^% v: A) M& |* {# ?: @5 I
   cout<<endl;
/ U/ F! Y, k0 n% B+ B0 M}% u: A# t" |+ V
void test()( V- K$ R2 l% A
{4 w7 }& m% Y' G$ O) N
    vector<int>v1;
1 f4 V5 @7 B, K5 R' s8 k9 `: _8 ]7 [, V! K6 F7 {
    for(int i=0;i<10;i++)
  i5 w4 c; U2 x6 L7 J+ ~0 A    {# N- _" E  x- N) ^' x
        v1.push_back(i);% k$ e1 p; E) {( L9 |9 N2 }
    }
, i1 }, _9 r. r- `    print(v1);# d# N5 `! s3 y
  //赋值操作
- a3 o/ G3 h3 z    vector<int> v2;/ `' w0 f1 d) E" l& f8 u# J  I
    v2=v1;
6 G# l$ r) V  d3 |    print(v2);
5 y+ g# M9 T0 s) s6 L5 Y   //assign(). i* x  ^" c6 g# x
    vector<int>v3;
, V4 L3 f" w" \. M2 T    v3.assign(v1.begin(),v1.end());- g( Z2 O* d7 u( }
    print(v3);$ e" J4 l+ H- Z2 _/ f0 L# n! I! c6 H4 E
    //n个elem方式赋值
/ j5 G* ]8 T+ t1 D    vector<int>v4;- o  }- q& ]8 H! |# F+ y
    v4.assign(10,100);
  g( e% |9 q9 H6 Q6 Q- j5 T8 V    print(v4);
! d5 P$ z1 l: S, d* H: c* g% Y# [6 a2 {
* H; B+ p" F7 d* \, y
}
3 f2 {0 u' i* C. |int main()
: c3 V  o' n- ]$ D{
# m. ?# g" q/ Q0 s, p# i  test();
* u# X# m; J) h, O4 B1 N+ J% g}$ e) s, c0 \9 B2 C: B

; b6 }  g9 T, v8 P! t

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
* M4 \, z, p- s8 l5 N0 1 2 3 4 5 6 7 8 9
: J- |$ ^6 w0 y( V/ s0 1 2 3 4 5 6 7 8 9
( }- Z: [  `" H! Y9 c0 1 2 3 4 5 6 7 8 9 ; v) t% O/ r+ ?1 I0 r
100 100 100 100 100 100 100 100 100 100 6 p/ j& ~8 t+ [5 Z  m$ ^$ m
) V3 J: s0 g1 a4 E9 ^

四、vector容量和大小:

1、功能描述:

对vector容器的容量和大小进行操作

2、函数原型:

  • empty();//判断容器是否为空

  • capacity();//容器的容量

  • size();//返回容器中的元素个数

  • resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除

  • resize(int num, eles);


    " f6 y, s* l) }9 n5 r% u

代码应用:

#include <iostream>
1 A. R9 o7 K" J( i2 `. i5 ]#include <vector>
. ~1 z2 r5 ?6 T, ]; S* f* }0 dusing namespace std;, ^. j5 f, q/ V) ?& o- a

1 \) {% E! ^4 m- i9 k+ P- y( Lvoid print(vector<int>&v)
  a- c) ?" I' H6 ~{! a& v  n6 H1 v9 A5 J+ F
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
# v! n- m! b; m: P3 d# {, T   {$ U6 g( R6 Q+ K6 s, c2 d0 w2 x
       cout<<*it<<" ";
! C( h& Z; f7 [" h* ~) Z. n   }
) L' E1 Q  L/ O/ b- i5 A   cout<<endl;- c4 q5 g  Q/ m" E- ?. ?4 }
}
' v" ~' d/ H! R; U- Q0 m$ [# Rvoid test()
7 `* C1 G) O: x, O( A; X+ P, _{3 x5 d' \2 R. g. t6 N7 Y
    vector<int>v1;
! {# g- x  c( w
  F! N( R! M4 ^" `    for(int i=0;i<10;i++)
! `; Z7 ?0 j" T9 |3 m  j9 ~    {
" f9 ^5 B+ V: @1 D, `      v1.push_back(i);' R: B  Y" R" ^9 C5 _) s8 ]" Q0 C8 ?
    }  A- y0 g: b6 m
    print(v1);" r! _/ q5 f) W/ E/ d5 B
   //判断容器是否为空( M- J: T5 c4 U6 I* i9 K: G3 F
    if(v1.empty())9 I$ X4 S# r! q' ~9 f; u2 [
    {
6 J! Y6 T! U( z3 H) _       cout<< "v1 is empty"<<endl;
8 W9 _/ c  w+ M    }
4 J. C6 |0 v+ P* c" j    else
0 S. {) {/ L: }& i    {6 C9 y7 o: H! ]7 b+ s& p
       cout<<"v1 is not empty"<<endl;+ i- e) B& m4 \
       cout<<"v1's capacity is : "<<v1.capacity()<<endl;' J0 z6 q( q1 M( n
       cout<<"v1's size is : "<<v1.size()<<endl;  k4 U2 m1 t' n
    }" ~# P3 \- s* u9 T5 g8 D
     v1.resize(15);6 B+ V' v$ k+ |0 j2 p1 ~
    print(v1);                                       
0 m" O8 S, ~6 V    v1.resize(15,100);//利用重载版本,可以指定默认填充,参数2,如果重新指定的比原来的长了,默认用0填充新的位置& |6 [3 ?7 M: i  U
    print(v1);
4 U% T4 M8 ?1 ~0 E( j2 q- t7 A
8 B" h# W7 }6 S6 g* Z/ \    v1.resize(5);//如果重新指定的比原来短了,超出部分会被删除掉
6 r# ~* L2 m' W9 G  o; H: b) |    print(v1);
& Z" Y2 {/ R" C+ g}
+ Q$ K" l8 {2 ]int main()7 ^- w9 j# C: i& m
{
3 w8 K! P- m; x3 H* f4 p  test();
3 o5 p1 |: l  Z8 N/ q/ Y4 [4 r}
  M2 ?' J$ O6 i3 `" v, b8 z( Z

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out) y5 ?% m( U0 A1 F& p
0 1 2 3 4 5 6 7 8 9 / T" d: E4 \, y7 y3 x$ `5 z- T
v1 is not empty$ {9 s8 ^. Y: {; K  D  v
v1's capacity is : 163 u* O/ u7 S( f$ ?" B) P
v1's size is : 109 o8 Y& o; T  L& M- s
0 1 2 3 4 5 6 7 8 9 0 0 0 0 0
8 o( H( C& x5 C$ t6 t, G0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 & r) C2 @2 w4 b& ]- Y( l
0 1 2 3 4 5 p9 b& I! N# x- g4 l, a

3 r" \% b7 \7 X/ Y, |2 D1 V

五、vector插入和删除:

1、功能描述:对vector容器进行插入和删除操作

2、函数原型:

  • push_back();//尾部插入元素

  • pop_back();//删除最后一个元素

  • insert(const_iterator pos,ele);//迭代器指向位置pos插入元素els

  • erase(const_iterator pos);//删除迭代器指向的元素

  • erase(const_iterator start,const_iteartor end);//删除迭代器从start到end之间的元素! N. l7 L; U1 J) _7 a- |7 @& h& J8 b, b

  • clear();//删除容器中所有元素 代码应用:

    # ^! l; @& \1 c, T& S
#include <iostream>. G+ r( H4 d& C- V4 D* ]
#include <vector>
0 i- v: }& p5 Z1 R9 }: ]using namespace std;
5 X5 p" A# Q9 h/ B! w0 A) J! dvoid print(vector<int>&v)
: E" o% i4 h% x{
/ h: B/ d1 i2 }! Y  L& ?7 E   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)+ M% a' `- N6 c1 N
   {
7 M9 E8 U" W, {: Q6 b7 s       cout<<*it<<" ";
+ ]1 @, I* z7 ^+ c   }
! e0 Y% l% V2 Q3 `   cout<<endl;$ D1 W3 V) `) R* W3 N2 H
}4 ^# M2 `! I; G5 Y! J. }; w# g' t
void test()+ _& ]/ Z7 z9 M1 |- w3 H
{
) |- c( w! ~: k$ b3 Y3 t( e    vector<int>v1;
) J8 b3 m& N$ f' ^6 w" C    //尾插; e( B) l) a. h4 a
    v1.push_back(10);
$ T( [% S1 m& V9 F    v1.push_back(20);
+ w4 z* t: T4 J% l. j# |$ m    v1.push_back(30);
! E. Z+ l* p, N$ N    v1.push_back(40);% X! i: [% ]8 {6 Z5 Q' X% P( f
    v1.push_back(50);
2 j( P7 C* Z' _7 ^) S+ Z+ a
# u: y# T  q. f" f! K' x5 R5 [/ q: f    print(v1);  K3 e# H& Q: H! ?' H
    //尾删
0 u# n6 I3 {2 H6 `! C    v1.pop_back();$ i4 g2 |& X1 n/ X- v: B% K5 u
    print(v1);
  ~" ~2 h3 F/ t, v    //插入,第一个参数是迭代器0 U0 M* O  T2 `" |
    v1.insert(v1.begin(),100);
" [* y1 c/ ~% m    print(v1);
6 B/ [1 a6 E6 p/ u
" A' E- H/ g, |1 w' y) O1 M5 l    v1.insert(v1.begin(),2,1000);' e& \) Y( X! V) @" K
    print(v1);
0 T- H( w9 s8 u1 g+ X1 a    //删除
4 R  d6 f# A1 H  p! N) G, t. O    v1.erase(v1.begin());
# v% R% d3 I- r- r) Q* h    print(v1);+ Z: f" \. H8 {4 c& }$ q
   //清空6 Z; L5 g7 o4 G* M, ?! P
    v1.clear();  d5 L( k9 {8 n+ `! w0 f
    print(v1);
3 q2 ^" X: g2 M# J. O2 {% A2 j% ]}
" W6 K9 @) j+ tint main()+ _; p1 W& C- u/ Y' h; l
{
- V, `4 F$ P5 f1 F' G1 t  test();; b" V) f! a5 R9 D4 ]4 c) N0 l- D
}
& h( T) b8 A- v! }5 O2 K1 X
# z$ Z! a4 @# Y6 N
结果输出:
5 t  M# H9 b  |; q
root@txp-virtual-machine:/home/txp/test2# ./a.out+ q) R3 A% `6 A0 V: ?" l  f: s
10 20 30 40 50 2 c5 U3 z% j6 Y! ^" W- Z+ m
10 20 30 40
3 b( Y2 ~  H$ V6 U6 a100 10 20 30 40 * ^1 V# ^. D/ `/ z1 p* j
1000 1000 100 10 20 30 40
3 P9 C$ M+ {! ]. L1 T4 b7 l; J1000 100 10 20 30 40
# H! k* u- I+ c6 k7 D
' I; e4 b1 J: k$ c2 M$ x' Y5 E/ L' a1 h% A+ i! \$ O& [% F

六、vector数据存取:

1、功能描述:

对vector中的数据进行存取操作

2、函数原型:

  • at(int idx);//返回索引idx所指的数据

  • operator[];//返回索引idx所指的数据

  • front();//返回容器中第一个数据元素

  • back();//返回容器中最后一个数据元素


    $ \# @3 U6 k3 x$ }

代码应用:

#include <iostream>) g* [/ q8 H  o0 {! {: `/ F
#include <vector>1 _7 L+ N3 ?4 O9 i
using namespace std;
5 L' t# v7 D% q' |/*void print(vector<int>&v)7 X; r# Z" M) ]+ q" n
{/ K$ w- w2 I2 t5 ^
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
! ~2 ]# ^- y$ r7 N6 T   {& r8 m# Q% [4 S# q: e$ ]3 g2 s
       cout<<*it<<" ";  k6 @$ J: \8 s" w9 [  M& K5 q+ c
   }9 G7 C7 O. _: y2 F7 N& f; H
   cout<<endl;
) X. d+ }5 o/ l$ T% E}*/
# z* s' D" ^: C0 |7 Cvoid test()2 H$ R+ N6 ], L1 f. E
{6 D, m& m6 }/ d: v; v8 Q
    vector<int>v1;4 M& g3 [$ [* {' a- H. e
    for(int i=0;i<10;i++)
5 L; @0 E- H( u: d$ A* W; x/ c    {
) C( `3 [6 v, L; h       v1.push_back(i);, w) o: T; \8 B0 H' D
    }
+ {7 D. a; ^+ T. I! A, h    for(int i=0;i<10;i++)
2 ?4 r5 o% m9 |. y    {5 g1 H- ?4 Z+ M! W: S
       cout<<v1<<" ";
% s$ M2 o0 s$ C9 J0 S2 f    }! @: u5 ^# z  |% R7 o) a
    cout<<endl;
2 s7 r% a! f1 |1 e/ F5 d    for(int i=0;i<v1.size();i++)
7 d2 |) n9 p  V( m    {
6 ?2 Q: \" @3 K8 F  E0 q       cout<<v1.at(i)<<" ";
5 c3 x- a2 b& g; O5 J" B% W    }/ Y) x, e1 n# Q5 b
    cout<<endl;
$ h' M5 ?6 N( X& c! t- P  _0 |; k
. r" j0 m  Z4 h3 P& `    cout<<"the first elemt is : "<<v1.front()<<endl;4 _; e& j% W( J
    cout<<"the last elemt is : "<<v1.back()<<endl;
. N1 g7 Z  j* @0 A; ?0 d}0 d' i$ X: g  M3 X- N/ U; s! i- _+ e
int main()% h- R' r3 C7 j: ~0 g+ @
{
! W( G. k/ ]: j+ Q  test();* k; a( E" E' Z7 {$ }/ U% v1 D, }
}/ h- D5 E5 p2 C+ R
. I, c" ^; G( K' [

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
" `' @6 {8 T! e" Y* H7 C3 y0 1 2 3 4 5 6 7 8 9
% d, L* J/ W! v! n1 ^; U8 Y0 1 2 3 4 5 6 7 8 9
$ j# l* ~8 Q! |" b4 P6 athe first elemt is : 0
) ^* E$ o$ p" u* |# U+ i2 cthe last elemt is : 9" `3 p  K: ]6 Y% k

4 e' i6 P; ?& Z
七、vector互换容器:" [& {( m$ l7 {; `# v
1、功能描述:
5 p9 e$ ~: X# A, ?   实现两个容器内元素进行互换$ }! i( ^, |; _7 ]
2、函数原型:# l1 c3 h; K, T8 `# a7 c! r
   swap(vec);;//将vec与本身的元素互换
9 k" k7 Z2 t) k+ G: f1 q7 _

代码应用:

#include <iostream>
. `$ p! S. D# l6 x2 `#include <vector>
( X% Q' V! g# A* z# Y) I# h) A5 tusing namespace std;* I# W, g' Z0 k* j6 v0 E
void print(vector<int>&v)
5 j0 h& o1 O9 T" ?9 Q{
9 b# T0 H+ k! P. ?; j0 w   for(vector<int>::iterator it=v.begin(); it !=v.end();it++), ~8 _7 i6 g* {1 g$ `' ?
   {
# u# |$ z9 S* C* ~       cout<<*it<<" ";. Q: W' D! P/ X' d
   }" A2 |" w' c4 f; `& U
   cout<<endl;$ K& M7 `" |$ ?
}* O/ c% N6 }2 v( l/ T
void test(); S8 Y0 ^+ L  \0 M2 I
{: Y2 l) p- Q0 X  G; W. b
    vector<int>v1;; I! }+ S- b) m1 w0 B  `  |
    for(int i=0;i<10;i++)
2 b( a8 r  Q) y( _, H/ j    {/ w6 {' f2 u6 X* [- L' s* A
       v1.push_back(i);
9 U7 a! p# Z) e0 e  c    }
, t: C; M( P* A, j5 t: x; A    print(v1);
4 q/ D, {5 c* z  ~; w( D$ K* N. t- q0 I- Q# x/ c4 w
    vector<int>v2;/ y9 G! Z9 I' I5 C2 I+ v0 i
    for(int i=10;i>0;i--)! G6 k% X* I2 E, K) R
    {- D2 ~- v4 i. K: L% F; Y& \7 c
        v2.push_back(i);2 M( M! g4 ^( N- z
    }
. H1 I- T' M. W    print(v2);% U/ a3 w1 u; a; u+ w7 f3 ?0 b

% G9 n: V7 o# a, C/ ^6 ]6 p    cout<<" after swap() "<<endl;
" V: w0 |3 d& H    v1.swap(v2);2 E4 N% G8 ~0 `. p, @+ {  R5 ]( G
    print(v1);( v6 n. q  B6 Q
    print(v2);
1 E$ T. i  Q( z5 Y$ g* Z/ _7 s}
7 e* A- @& j4 I% Kint main()
/ n# B; _  R5 O{
+ `* s6 Z: n; c+ \; p- _, ?  test();" r8 `$ B5 c/ N
}% A/ W) m5 V. d) x9 A& p
2 P8 D3 t! I6 v, l

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
% ~" D* f" @( T! c6 Z/ M6 {8 T: K# R' k0 1 2 3 4 5 6 7 8 9 9 o* N0 \1 h. f  V7 ?5 |& |
10 9 8 7 6 5 4 3 2 1
* b/ }6 C( H  e after swap()
7 S( [" `9 P! T+ O/ r' y" O3 _10 9 8 7 6 5 4 3 2 1 - X# f* j4 _3 @* r) ]  H7 H! Q6 O
0 1 2 3 4 5 6 7 8 9
8 X+ T: b& |0 g
, w# [) a, ^* Y

利用swap进行收缩内存空间

#include <iostream>8 B5 u3 F* C6 m
#include <vector>
' Z) C3 q( Q  N9 busing namespace std;
- z. F% {7 u! H6 e/*void print(vector<int>&v)) |( S/ N, U! W% s
{
0 w% ^6 p& Z$ {& `3 n1 h   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
3 Y: A) o* O8 [; |   {
* M  `; P) U  ~( X( k  `7 @       cout<<*it<<" ";
0 q2 y2 ]+ `; x1 K! `   }
% k( V$ I1 C0 o   cout<<endl;# b# D- Y3 g9 `9 v: Y4 R) j
}*/* m( b9 u4 G/ G5 U. h1 t
void test()
- t& e6 ?% j/ Z/ a' o{
7 K1 g+ {7 U, _5 Q" J6 j    vector<int>v1;
  Z+ _( f$ G% \0 J+ M/ |    for(int i=0;i<10000;i++)
6 N+ p6 J- C6 T3 ^2 c/ d    {$ f  ]9 Q5 O- U2 j* G5 c4 e
       v1.push_back(i);
& p' ~" h: A/ M" H9 m" w    }
# ]5 p% m, @$ W, ?) ~    cout<<"v capacity is : "<<v1.capacity()<<endl;
% m% C* G0 \4 S: ]# K( Q9 U1 h    cout<<"v size is : "<<v1.size()<<endl;) H% W7 [8 Z/ K! J
, L0 ~+ _% I# v& i
    v1.resize(3);
  g, c  l; `4 `% r7 C/ \    cout<<"v capacity is : "<<v1.capacity()<<endl;' r7 a* m8 X0 ^+ B
    cout<<"v size is : "<<v1.size()<<endl;+ k% ~( `7 j( J9 O5 [4 @

/ q: d6 }5 a% }& Y7 z) z    vector<int>(v1).swap(v1);2 g- R+ \& P$ G5 G) `* O
     cout<<"v capacity is : "<<v1.capacity()<<endl;
1 P4 v# m8 n7 O    cout<<"v size is : "<<v1.size()<<endl;
1 y2 Q5 D! j+ n. K" I4 e3 h* r6 }0 E2 H
}
+ z( K: Y! c6 H; ~& D* k( O3 |int main()4 N7 k/ q9 r+ Y1 M- d
{
% H( n7 n0 i- D1 S' U7 b$ m, w" U  test();
+ _8 U+ `9 w5 K  q& K9 T# @}
9 T$ C' V6 A% n& n( \+ V; W1 y

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out( c9 Q$ S* u# U" y) \
v capacity is : 16384( U6 X7 X$ Y: h- B; m* y. i
v size is : 100004 S- ]) ], b' m6 Z3 b" ^6 D
v capacity is : 16384
8 B, U+ _( @1 {8 ~% W, Yv size is : 3
- j% V: E. H( i0 G9 Qv capacity is : 3
! H; [0 H: @3 t$ F- y/ Dv size is : 3
: d! B- A8 z* b6 [, D
3 ~5 v* s8 L' T/ i

八、vector预留空间:

1、功能描述:

减少vector在动态扩展容量时的扩展次数

2、函数原型:

reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问                                               代码应用:

#include <iostream>
5 ~% D# Q. O' ^# I  @5 M! G* m2 _9 a#include <vector>
( A1 u! |, t3 \# A. C& Y* |using namespace std;; j# a3 G+ ]  b. ?" |7 h' @
/*void print(vector<int>&v)1 H- J% Z0 h: k/ Z1 A. Q* t) D
{2 e0 @2 g4 I6 r+ X3 `9 \" m. h
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
# P( P7 U9 `7 _; h/ _' G# f   {+ s# R, k# t5 I* g: t
       cout<<*it<<" ";( z/ X. E+ B: ?: {8 o# ~
   }! e" y. G& T! b9 U
   cout<<endl;
! K: R4 \6 t6 \/ l% I# m}*/5 ?/ W1 ]& s0 ?
void test()) x% v& K" h# ]6 b8 r
{. x- y9 p! O; v. S
    vector<int>v1;
: K% Z" f# [5 F; u' V$ u7 u    int num =0;//统计开辟次数  w/ m( o- w( B# L- ~
    int *p = NULL;
9 W6 `2 P# G$ e8 I# o8 \& R: r    for(int i=0;i<10000;i++): v- V+ Z% K" m+ H# m6 O# I+ w
    {
8 h* L* s' W  J( T# @/ Q6 h        v1.push_back(i);9 a) B: w0 ?$ ^' g
        if(p!=&v1[0])6 U3 S- }5 z* G; J6 N  h
        {8 M. u! ], \  b
           p = &v1[0];5 h, b% _+ \* }9 y! |" B/ Y$ b
           num++;! R7 a& u# A5 G/ c
        }
' L8 D& f9 F' a, x. Z    }
0 ?9 s& J) q" p7 k    cout<<"num= "<<num<<endl;9 T! d" O7 B: N+ w1 U1 I( }& ~
}
3 F4 w3 [8 F8 p8 l8 W- wint main()
7 N* p. B% v, r* v" t) y5 L{# Q! v  @5 Z( q5 u* Y
  test();
, p* g# ^: l8 x! \6 x7 ]  m2 w}0 [, v. m* G3 N2 x; s! c

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out6 ?# j6 `) x0 {
num= 15

' }/ K% d+ H; E8 U* {! d

8 ?- f. i7 X  E$ m) Z0 |. e
赞 收藏 评论0 发布时间:2020-10-5 21:42

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版