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

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);//拷贝构造函数


    % ?# f' v% }; F9 ?0 a4 V/ I: a

代码应用:

#include <iostream>) j* ?6 V. y6 |4 M) X, a3 f
#include <vector>
% u  g5 I( l$ a# F' W* M3 uusing namespace std;0 b' R$ b. `- m* I/ V# c
//输出打印- Z8 ~% n5 o2 c0 U. I
void print(vector<int>&v)
; s# T$ H! h# \2 S$ j+ i, _) b{
4 d4 G* ^. z/ J# k. k   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)8 z! c# H# |* c2 \3 E
   {
% K, @. ?9 A% T- q       cout<<*it<<" ";$ f2 z# `- r1 i5 f, [# K
   }9 D: j1 t& _& g  a9 _
   cout<<endl;* l' N4 B4 d( K& u
}4 H/ Y- O# O7 g
  //vector容器构造
0 U, K) D" c: X) |, ovoid test()6 s, S* K5 U. y& X  l: ~
{
. Y8 k! S) N/ J    vector<int>v1;7 ]0 x2 ~/ W2 F: N3 W, t; L0 S' H- I

8 }; Q/ V* d& r    for(int i =0; i<10;i++)- L* p4 v$ `1 e
    {3 V7 L1 p! j0 \4 T4 V
       v1.push_back(i);$ w# U3 g' c/ a2 I) U- q* r
    }
1 L2 e; O* T! S2 t8 D# D    print(v1);
2 e- j$ p0 j; [6 Z   //通过区间方式进行构造
6 L% h) I1 f0 j3 t: t% T3 l    vector<int>v2(v1.begin(),v1.end());' t3 E: d5 I7 X' V
    print(v2);6 E3 @; ?1 E- b3 i* ]
   //n个elem方式构造
9 K. b( o; V+ c) Z/ o1 h0 F    vector<int>v3(10,100);
2 h/ |& ]# a1 Z9 s    print(v3);
, X1 l( I9 U# ~( E   //拷贝构造
. r- [9 S6 q" d9 X, @; a( W    vector<int>v4(v3);
, p5 E  Z( B2 S8 s    print(v4);
% w) w& R" ]! f5 B, k! X9 Z& |9 Q' V! ?4 O: D! C7 X0 c+ w
}, P+ d' x: }' Z- w
int main()
* w( r% u4 b7 L" I! {{
% F; Q2 A$ C3 g5 h. p6 s+ N% o( A( \3 y  test();
0 n, O. j8 r, W, B& d}
4 B4 A. p2 N6 N7 l! H: n# v! J/ Y/ o  n( c& x

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
, j- O$ H3 E# a1 e+ ~0 1 2 3 4 5 6 7 8 9
: w6 V7 [* j: Q9 X$ J( B3 d- K& [0 1 2 3 4 5 6 7 8 9
( p! x4 g" J% }$ k- r' r100 100 100 100 100 100 100 100 100 100 3 L; w$ H0 T1 p0 ?, a
100 100 100 100 100 100 100 100 100 100 $ l( }4 w& U7 w  r( |
7 A. ^, O4 n# U3 B1 x3 a

三、vector赋值操作:

1、功能描述:

给vector容器进行赋值

2、函数原型:

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

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

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


    2 `0 a& ?% @# W. @8 t

代码应用:

#include <iostream>' V0 y8 R* e. M0 o& }
#include <vector>
1 y4 h$ J  S; k# a, Z/ w* o  tusing namespace std;
  ^! y- M9 G6 x' b1 Q7 }8 C' t4 r  n* ]- N
void print(vector<int>&v)
, g- v0 B8 X# O" g1 Z, m- p: D  H{
( b: @9 B3 W* {6 A3 K4 Q   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
2 t5 g' x) Y; h! \/ B  W   {
. W( f; [8 e2 G6 t# |' I       cout<<*it<<" ";; S2 Q! u1 y- ^  k" E' y
   }$ o( |3 G& y- u% I3 J
   cout<<endl;
9 d9 H# Z7 G- Z3 p0 k, G1 G: G}
9 f/ T1 w) T& V9 k+ j# S4 L2 e7 jvoid test()
1 K1 k7 @! C# K" w{
% T+ a3 s( X) R. P$ ~+ g    vector<int>v1;$ o  s  |' L: y, z; P& N5 y
5 h' h  |' r9 e# c9 x) _
    for(int i=0;i<10;i++)
" n2 v7 v. O+ e4 R    {: r5 P. x; n8 h! p
        v1.push_back(i);' c. b8 f$ ^0 \: P3 ]" `
    }: a6 _; x$ H+ d8 Q  i+ D
    print(v1);
$ M. `( E/ P5 O) M- a3 _% N+ Y  //赋值操作9 i4 d9 p* m6 d9 E  L( s9 D, e$ m/ e2 X
    vector<int> v2;) p( B9 ]! |! }# a
    v2=v1;; L, H' I" W) {
    print(v2);$ o! _* ?$ }: @4 T4 S5 k
   //assign()
7 d0 \% F) A: }9 d3 t/ A0 v2 y. R    vector<int>v3;
0 K* c$ Z7 l& x/ L" z    v3.assign(v1.begin(),v1.end());2 T, c" w& V; k7 s) p8 |- M
    print(v3);& F; k  ^2 {! R2 j; T  {, ]* J
    //n个elem方式赋值
+ O& l# w8 y# [" I6 G  @: ]    vector<int>v4;
1 S6 W7 N- w3 ]    v4.assign(10,100);0 b; S0 j/ r& ~$ q
    print(v4);
) d* p9 I& I: D$ v. B7 K6 T9 c/ H' N+ i5 g8 n3 a

! A& l- R3 v3 ?  v2 q. q$ C}, _! I6 O2 q- j- l8 X
int main()
+ [# `# C% I8 e{* w2 E8 _  Y) t  F
  test();6 k0 D* n) Q, z4 w5 A
}
' a& S5 y2 f1 y/ k5 o% }
2 l7 s2 d7 L7 U1 C" e+ B

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out! W/ B$ n1 W2 Q' K. R" ?  ]
0 1 2 3 4 5 6 7 8 9 8 c! \9 o  |8 o! M( _. X- M
0 1 2 3 4 5 6 7 8 9
7 e" _  B! N) }, Q- M) P8 B/ _0 1 2 3 4 5 6 7 8 9
$ A  G7 x7 \! u. E; H) n100 100 100 100 100 100 100 100 100 100 + t% _& v- a* g5 U! O/ s
" c# O' ^# u" T2 ]1 i8 O( n

四、vector容量和大小:

1、功能描述:

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

2、函数原型:

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

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

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

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

  • resize(int num, eles);


    4 a/ y4 m& `( G, d

代码应用:

#include <iostream>6 H2 e, I0 h5 k( d- {8 L
#include <vector>$ s8 z3 C0 g! Z" l" g
using namespace std;
8 w, B1 G! r9 H; U; C/ ^7 i. `7 H1 h# i$ q' I' K
void print(vector<int>&v)
; W% D" s/ `1 V/ v9 X7 S{2 R% e( ?( _9 W
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
. u0 S5 v+ z- b   {
& C1 P8 d- L8 L: Q, @) H4 _       cout<<*it<<" ";0 J% S; t& k% Z
   }& P  F0 J* H1 h/ A3 i& B
   cout<<endl;5 A9 C0 a6 |3 B5 z2 ?
}
, K; q8 h5 s% v  D) {4 Yvoid test()5 L* c6 ]4 H3 p7 W; Q( Z
{# o5 Y+ M! E- g( P& @! ]; {: X. o  k
    vector<int>v1;
& m+ G4 J" r4 O) P0 V5 x+ n6 |+ y- H& r% Q, I8 S
    for(int i=0;i<10;i++)
" X$ B0 s/ m) i% {/ i0 M  o- m    {* V7 {; \9 n5 ^8 |$ D4 d% G$ f
      v1.push_back(i);
7 U  V, o4 K" _# O) r    }( m+ V- [4 j$ F  m6 z
    print(v1);& q+ O$ c  q5 p; Z
   //判断容器是否为空
8 ^" }* y+ r/ F    if(v1.empty()). x* k% w% \1 [5 {/ }% [, S# n* B
    {# t) h3 B, D8 k: ]( J- }# [, _& j
       cout<< "v1 is empty"<<endl;
4 o1 x9 a: P6 Z, o8 u  R    }
  R- H! o* \' k0 K; W4 L( `; J    else
) N; Q, I" u  d  Y    {3 F6 Q  Y! X  h$ y' \
       cout<<"v1 is not empty"<<endl;) l. V! ^' Q9 n
       cout<<"v1's capacity is : "<<v1.capacity()<<endl;# E! B7 A- i5 P
       cout<<"v1's size is : "<<v1.size()<<endl;
4 Z. q6 T% P2 e) F    }
/ F3 i) d0 [; O4 q1 n     v1.resize(15);
# v9 \0 u( O3 `% j+ r. b8 ^    print(v1);                                       9 {* a0 t2 u3 E6 I6 Q% f$ Y
    v1.resize(15,100);//利用重载版本,可以指定默认填充,参数2,如果重新指定的比原来的长了,默认用0填充新的位置
5 X( b4 S; O) s% Y    print(v1);
- ?% W) G+ W9 \
; o9 }3 _$ f5 N% b    v1.resize(5);//如果重新指定的比原来短了,超出部分会被删除掉
2 W2 }/ m. V* z4 ?    print(v1);
* r) z$ G' I4 T7 r- R}
3 }, M7 b9 s# @. d/ o; h5 U* \int main()
  W& h7 f& M+ U; z# o5 S{
3 t+ G, g# P( |6 e  test();1 \0 s$ F* b; n
}
% p3 e5 S/ E/ R0 r3 g% R

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out! z- w. |& u# n( V  ~% U& R& Z
0 1 2 3 4 5 6 7 8 9 9 ^  H+ u, u2 H4 {5 v. w) X
v1 is not empty
4 G- d1 t6 }9 fv1's capacity is : 16
9 t: U% a! z& H: z. A6 Sv1's size is : 10
. W; G$ G5 r" S6 u1 h8 H' H0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 # M/ q  n. I' I  z
0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 ' a1 w. a# Q5 d2 M4 Q$ ^. ]
0 1 2 3 4
9 \) `" v6 f0 x1 B: q# t. `( p- g( d/ u4 c( Q# C* m+ x

五、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之间的元素0 U% e9 j9 @- l1 C1 A2 S. |' |

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

    + w9 t# B/ K; f! k" g
#include <iostream>9 h5 y. I5 H: g+ h. R- m8 Q, K4 w
#include <vector>, [4 b7 b( [/ K5 @
using namespace std;
# V! G' U3 I$ ~8 J4 w& hvoid print(vector<int>&v)
$ S  x0 q5 i* y& v2 B$ U" z{) F% \$ Z2 O- K6 o. `# z3 z
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
  M- K$ L$ Z0 p8 R! }) G   {9 J+ C* C( {  y  {% X: ]
       cout<<*it<<" ";
; ~8 y: G! Q8 f( D   }
, N) k: Z% s5 R: W, x# u7 u6 w8 q   cout<<endl;1 a& [; M; K& c$ R( T% Y  z5 I4 {0 V
}
! I) _" z# t$ F4 j- T. ivoid test()
: s, H3 M: w' U) i{
1 _; a7 U8 A0 _    vector<int>v1;7 w2 B0 y$ t" U+ U# z8 K
    //尾插, ~" r, u8 B8 R9 h
    v1.push_back(10);4 Y6 D* x$ Y6 ?0 r# A- h8 H1 v' U
    v1.push_back(20);
/ z: j4 O$ @6 R' p    v1.push_back(30);
4 A- b7 f" C# k# H/ a( Y    v1.push_back(40);
5 Q0 ]+ s6 r6 ^3 F* l    v1.push_back(50);8 Z6 T; ~. N; i# ?( t+ H/ R! r! P
8 {$ V3 N) {+ A4 `
    print(v1);
  h8 |$ E+ L, r5 w% j    //尾删& U- j% k1 k- t& Z0 V
    v1.pop_back();
% d. J; _6 q1 K* B0 T    print(v1);+ v( `/ C. u8 f
    //插入,第一个参数是迭代器3 p' ^% R1 Z, P2 R, U
    v1.insert(v1.begin(),100);+ p" G: j/ w; t7 T* T0 p% P/ F
    print(v1);% ]* u! [4 Y8 a3 Y5 [

5 |; I# w7 F5 O- I4 p2 a    v1.insert(v1.begin(),2,1000);
* u- u' z( M. H    print(v1);
- b) L9 `$ c# x- O( L& }    //删除9 Z9 n3 g6 m+ s* u6 B' F7 Q; J
    v1.erase(v1.begin());
) x" P( K/ Z. |3 x$ d" ~0 h5 E    print(v1);6 l2 v! a. D! h- j, u9 E6 G
   //清空  v1 E5 |( u7 W
    v1.clear();
/ Y3 {) s: J6 m    print(v1);* Z( M3 w0 M7 }: J+ @" Q/ T. A
}4 R9 R4 R0 V8 e* W" ]8 ~+ b) Q. h
int main()1 Y1 x% [4 c% c% R& F
{" B0 o: |9 K. W  G# Z( K
  test();& N5 [- _* Q& ^3 z* m0 R2 p+ ^/ d
}2 S1 y6 ]0 ]* @  ]( G4 h

$ F8 r5 ?7 {0 @7 @6 s9 \
结果输出:) A& r  c) D/ Z7 \
root@txp-virtual-machine:/home/txp/test2# ./a.out- g" W, y3 E/ _
10 20 30 40 50
# r& _+ \: T% u& r' Q5 L" A10 20 30 40   a( I; Q6 O( I' l0 D
100 10 20 30 40 # v! h& }; J  Y
1000 1000 100 10 20 30 40 6 M+ P: l& `- Z, ?5 A' W' [* P
1000 100 10 20 30 40
% B8 j) F! R% k+ E  P! s; ]2 `
# E' @8 ]! Z4 r# @5 x7 n1 P/ w6 N: A" H  q$ o" ?( K

六、vector数据存取:

1、功能描述:

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

2、函数原型:

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

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

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

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

    ; b- ]6 n% {! E- ]

代码应用:

#include <iostream>/ P& R2 s$ r, [! _5 u
#include <vector>6 H1 R& ^8 F/ p
using namespace std;/ X% i) ^5 B3 {. \5 c
/*void print(vector<int>&v)  l, ?* u: H6 }# n
{
: O5 v8 d* X, y1 h! u+ J   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)5 g* D, |% \2 F3 W/ z: Y& e: X% _3 \
   {: c! B$ [* w' U9 V+ l* _% x+ t9 }
       cout<<*it<<" ";
$ E+ j' {7 |. W2 m   }: o2 Z. f4 D1 d% A, A5 P
   cout<<endl;
/ Q2 p+ R/ H3 K7 s. s3 r}*/
# R' Q! O, X6 C/ X9 E8 i" e- O8 x1 Cvoid test()5 U% r# ?6 j5 P7 e6 s: H  y+ j
{
/ J2 ?& I9 W  n5 j2 V    vector<int>v1;
  F4 P; K9 X4 ?    for(int i=0;i<10;i++)1 G& x6 A' A2 G* q9 C
    {
. N) P/ e/ @  c5 N5 k       v1.push_back(i);7 w- x0 s% w4 M( Z7 E" {
    }$ v: L" \$ _8 c5 C# O; |
    for(int i=0;i<10;i++)
1 i! V5 E, p! t2 T    {
) d# r, P' j, Q. Z       cout<<v1<<" ";/ r! O. Z, n: u3 \
    }1 L* U- R  A. k2 j* J
    cout<<endl;* q7 E% v6 u2 [) j) A  b
    for(int i=0;i<v1.size();i++)& S6 N; s1 ^' A$ `& e9 c) y& A
    {8 z0 \5 e* T- H. z0 {! Z! r- _" b
       cout<<v1.at(i)<<" ";( r" d# d% n- G9 u! _
    }
6 L" e- `: q6 v6 Y8 T* ?    cout<<endl;9 k" Q4 w" R+ D4 a8 N% r

( A4 R7 Z% P& |- U    cout<<"the first elemt is : "<<v1.front()<<endl;5 l3 y8 `; p* m! ~
    cout<<"the last elemt is : "<<v1.back()<<endl;
6 [* T: V, Q0 ]6 E4 \3 n}' s7 U$ x' f$ c* d
int main()
, ~. N4 b3 N& v" n7 w3 ~{
1 J4 y8 S) I' i  test();
2 a( I" m* J% Q  [" {- k8 z1 a" W}
% }: V* H. ]) k7 G+ H/ F+ V: ?6 Y; v. T  ~; Y- x( H: e9 T

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
2 z, P- d/ W% a( C; m! A! N0 1 2 3 4 5 6 7 8 9
+ l& @1 H2 ^1 x. u1 Y: @0 1 2 3 4 5 6 7 8 9 - c$ b9 v5 w! U" C' K
the first elemt is : 0/ I) N" [: i4 ?! t# s: {) ?/ q% s
the last elemt is : 9
# N! @- ?$ O2 ]! _! s" C& b
, ]* P9 j: B- i/ H+ R4 s  g( p; D
七、vector互换容器:
4 U$ }& C: T9 Q* U/ z# Y; L 1、功能描述:+ r9 Y1 U' [, P/ J- b' H
   实现两个容器内元素进行互换$ [: C( h6 |. m7 B& I
2、函数原型:: m- @# K- z1 l7 y
   swap(vec);;//将vec与本身的元素互换% b+ r; [+ R+ ~4 T! H

代码应用:

#include <iostream>( h( L+ j1 \0 k4 `: c2 N
#include <vector>! t' |1 U/ X0 @5 X. F/ i
using namespace std;
5 n4 h& m: ]; D8 @void print(vector<int>&v)
: e& q4 l  K! s{
* _2 w" c8 F& l! }! ~' G   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)7 l/ e( \, o# x
   {
/ S* M$ h& P) s  t& r; D8 Y       cout<<*it<<" ";
, n5 ?) U9 D/ k/ z! O$ u% ^( D5 E   }
- d$ c) [8 T6 W9 Q3 ^6 _0 H   cout<<endl;
. F/ f) o$ \8 V( e* J2 l}, A, _! A" h* b( l3 b0 b- g- f+ M
void test(). U: ~0 u6 v' i: Z5 L
{
- D1 m. g' p4 C) o4 S( g    vector<int>v1;
: ^8 a2 u$ m: _3 `% ?$ u$ M    for(int i=0;i<10;i++)" z3 o4 [" W$ n9 L% F: ?' p4 W5 z
    {7 f. k) Q: z) W2 h
       v1.push_back(i);- C+ g  l" H! Q2 W
    }. u; U/ z' t: I! j
    print(v1);! p+ M3 y+ w1 k' n4 u" _
# P/ Q) D$ p. Z5 X; |1 a
    vector<int>v2;
" w. a' w+ b! E8 X    for(int i=10;i>0;i--)
  q& z# p) b8 P) ]1 [    {
, L4 a) q2 R1 N        v2.push_back(i);
# _# l- i( V6 \  Y( \) s    }
3 o# g) ^% ^% @1 E' z$ W0 d& h; w; f    print(v2);  r6 x$ I, G0 K7 o+ q9 H

- m3 w# P* m5 q" K/ }4 z    cout<<" after swap() "<<endl;$ A" X9 U1 y6 H5 f) Q4 [' H
    v1.swap(v2);& [7 T  H( F/ k, |6 L
    print(v1);- a) p& q# C$ [( }9 Q2 g
    print(v2);/ O7 l' @* ?0 W& P9 j
}
2 ]; ?: X1 G9 b5 h0 C4 }- e6 kint main()
2 L" t3 R3 O( W9 O{
1 X; x) m6 e* M  }3 A% g( n  test();: W) t! ^' D) X5 b4 q% G
}1 j) b* j& N5 c) {

8 L4 s$ V( E+ p$ P  S- z

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
8 b+ Q+ U3 E# y. h. ]8 j0 1 2 3 4 5 6 7 8 9 ' C! w$ J+ F( Z6 n0 X$ W
10 9 8 7 6 5 4 3 2 1 + ~8 ~. u7 \3 l9 K; H
after swap() * O2 J6 r$ m2 g. L( s6 Z  V+ |9 h6 ]
10 9 8 7 6 5 4 3 2 1 ( E- ?. ]) x: S/ v, i
0 1 2 3 4 5 6 7 8 9 $ ^; i3 s2 r9 L6 o+ u) K

3 ?+ |! g5 Y% d; r

利用swap进行收缩内存空间

#include <iostream>! H2 ]6 i& d3 ?6 U4 T+ k5 J
#include <vector>$ U# r" ^' D% U+ U
using namespace std;- `# A8 W% B& f& v
/*void print(vector<int>&v)
5 v/ P4 M# S( _$ ?" N# M8 o+ {; B2 f{
7 [# C. x/ W- _- l   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
; Y' b: G9 H/ p. L% n8 J   {
0 B8 u( Y' @/ K, t       cout<<*it<<" ";  ]9 C/ k4 e8 w; Z
   }
* d% F- k0 O/ w   cout<<endl;
9 t6 M4 e. N3 R3 W& m% Y. O}*/
5 G; F2 q5 `# k# v8 \5 xvoid test()
' W/ V0 @4 a* D/ R{
5 G5 k( C- V, ?0 v5 t    vector<int>v1;$ [* g4 p0 b+ R
    for(int i=0;i<10000;i++)
$ g! Z& V7 O) ?8 [1 M    {
; E  c/ M1 p: t9 |4 j       v1.push_back(i);
9 c  I* Z7 l/ M2 `    }  [8 F5 c: W! k) ~$ ]+ ~) s
    cout<<"v capacity is : "<<v1.capacity()<<endl;
9 t1 A6 F( O1 L+ A( x; i4 S    cout<<"v size is : "<<v1.size()<<endl;
8 d% T3 v" N; v  ~" K+ q" \; s* G4 |, J
    v1.resize(3);7 }/ u0 q- [- _7 ?  Z% x
    cout<<"v capacity is : "<<v1.capacity()<<endl;7 B8 \( H$ g% I! Z/ L  _1 `# \
    cout<<"v size is : "<<v1.size()<<endl;
, J( b. o1 t# _& g5 g2 ]: R9 i% n% S" H. k9 l
    vector<int>(v1).swap(v1);+ Q9 W& Q% {8 r$ M) g) j* F. V+ n
     cout<<"v capacity is : "<<v1.capacity()<<endl;
* w5 t# b; o+ S3 x  u4 D2 j( X    cout<<"v size is : "<<v1.size()<<endl;
$ f5 y! ]' c$ l2 x( Z3 ~' ]3 j; F' N" d; l2 Y5 S4 `& S- g
}9 L3 \. o) A: L; h
int main()
; n  O/ ~, V6 q' C' Z2 N- {0 ?{) ^& }; b1 ~8 U- h
  test();; S7 s0 S7 x% a
}4 D; |& ?% W/ k4 P' }5 J* c

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
/ @' w1 n2 O; W6 Wv capacity is : 163846 h4 |6 @/ T/ _/ k
v size is : 10000
8 s/ [( i! I6 l$ u0 s( Kv capacity is : 16384
& {9 ^& Z/ H& [8 hv size is : 3
+ O$ m% o' Z* J$ lv capacity is : 31 u8 G5 F9 b; [# a5 D
v size is : 3" L, C  n4 p1 a0 ?9 B

, Z, u  e! j  b& E( z: Q

八、vector预留空间:

1、功能描述:

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

2、函数原型:

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

#include <iostream>
" n) _8 h" w2 c' J#include <vector>0 Y3 U- v5 m/ B6 Z5 z0 o+ f6 }1 L
using namespace std;
! K  j" h% G, z! s& T( ]7 w: f/*void print(vector<int>&v)) M. ~7 z: _' l
{$ J/ r% R  L: J& H2 O
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)# ^. u7 y- z$ `7 m( d% B
   {
# q" F. ]7 ]0 N( d7 O6 a       cout<<*it<<" ";+ G! C$ @- x  p
   }/ u' {  [7 [* D8 {2 j  i
   cout<<endl;
: F& F: M+ B( [0 o3 g$ v; E}*/3 B3 A1 Z& c/ `6 K
void test()- n+ k# S8 u  u& S
{
* s: ^1 H$ l" Y2 E    vector<int>v1;# b- u5 m$ v" I
    int num =0;//统计开辟次数% l3 v' E- a* }' T' [# \
    int *p = NULL;
! S2 ]# |3 u0 i, n+ l    for(int i=0;i<10000;i++)
: T' Z- j/ Y7 ^4 f    {
+ C7 |( T2 F4 M5 \% q* e        v1.push_back(i);
. S: `6 m* o; U  W2 P        if(p!=&v1[0])
4 c( ^  I) q2 r+ c, }! C        {( e: h* v, V# i% n" W8 A3 W
           p = &v1[0];
# Y# _8 s" g8 Q+ `           num++;
6 e$ u$ M; R5 ?) B* Q4 `( Q        }" Q, Z: I% ^1 C  [+ Q- A7 H
    }
) f7 m! K4 s4 h8 \    cout<<"num= "<<num<<endl;
2 |, h: G0 f6 r2 h5 Y1 `* u}1 s% R1 I" c0 t7 d( G* b9 P
int main()
8 I9 q* d% l2 C% u  j/ p{
" e# ]9 s/ |% r# O  test();% Z0 O# ~/ a4 U3 A% w; v6 F& L$ L
}
: c$ k1 W/ Z: J  V" Z( L

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
: x& r, \2 E' a9 ~! N4 Onum= 15
1 f2 z( ^$ ?( c2 L2 ?' |  @
; B& N1 w; y8 n& j
赞 收藏 评论0 发布时间:2020-10-5 21:42

举报

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