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

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


    ) V) d( @. H' e$ d" b

代码应用:

#include <iostream>
  E) G, b( f$ w+ W: ]#include <vector>6 K2 J0 G9 N% {% z# n3 g5 ?5 D
using namespace std;
/ _# ^3 C) ^* A( n//输出打印
, Y5 |1 E/ ~; S3 k- X" fvoid print(vector<int>&v)9 L$ t" h$ U' @, t) p
{
& ?5 C# R. [7 D5 r   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)8 g4 K+ N: `0 l# l6 ~6 B
   {8 P3 r3 n) u; e+ [6 R/ w
       cout<<*it<<" ";
2 o4 ~2 p! V8 \1 n+ g: |2 @   }0 w! J5 w- a# N0 ~4 i. e0 D6 [$ ?
   cout<<endl;4 b- ]& F  C) p/ B# B( s/ u
}* S0 N' p( A, E9 S4 h2 |4 O& \
  //vector容器构造1 Y8 l! \, N' G! s. O7 m
void test()
; M3 E5 m9 e( E9 c{
. e8 B2 ]0 s0 C    vector<int>v1;. t7 I9 w/ d7 B# A" ^! G. ^) J

/ W* S# C, i  l; X5 i$ o, H. p    for(int i =0; i<10;i++)6 k* h+ j9 a7 o( l6 k
    {
9 Z1 I7 c# `1 E  ]- M; w       v1.push_back(i);3 d. J" ?2 v2 l7 z0 M
    }% |0 h2 y0 ]: E. \
    print(v1);
# |8 N; P. m- X/ j. F2 q3 o   //通过区间方式进行构造
7 i! ~+ q- K9 A* K  S1 H3 t" C! ^    vector<int>v2(v1.begin(),v1.end());6 p% L% S, f  a2 {7 y5 K
    print(v2);
: X3 z0 a7 ^  [: k   //n个elem方式构造
  X+ M# r' \9 [( @/ G. `    vector<int>v3(10,100);5 I: [3 K  ]$ J# ~% ~
    print(v3);! }- w' A. [0 F9 z
   //拷贝构造
+ X8 w! ~7 h8 u# ^) s9 }    vector<int>v4(v3);
' M5 m' @# u( J# d7 e, I9 Z    print(v4);
8 Q+ `! h* d" O* V3 L9 [! ~- G7 t$ O& ]- A0 \
}4 D: ?; l6 [" m" f7 l( b
int main()
2 o2 H, n7 K& Q% P4 ?8 d9 `{
4 P2 b% Q* V# P+ u. Q  test();9 v; P5 o' b" z- c
}
: g1 O9 h  W0 i- ^$ [6 M" c7 p; s9 \) W0 t& D

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out/ W6 ~/ F/ |, u5 M1 \
0 1 2 3 4 5 6 7 8 9
3 Q# `6 ]& a# C0 1 2 3 4 5 6 7 8 9
- [$ V- H2 |! c0 {# E" F- g( E, g* C100 100 100 100 100 100 100 100 100 100
; Z7 Z# n, p* o! Y100 100 100 100 100 100 100 100 100 100
/ o$ }) _, P2 o1 A  n7 I! Z
. E" ^& T6 z5 D: A" j3 I+ y5 K

三、vector赋值操作:

1、功能描述:

给vector容器进行赋值

2、函数原型:

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

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

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


    $ u2 F/ E! U* x7 N' c! _8 X( B5 k" F

代码应用:

#include <iostream>
: `5 G6 z2 F3 h5 S8 f0 k#include <vector>  j7 d6 n2 [  p4 J$ x, v
using namespace std;1 U- Z+ i$ c7 w$ E
0 @2 L* L2 d2 Y4 \; V1 g
void print(vector<int>&v)
( k! z  \3 z! }- K  U/ U{* r) q: L6 ~; i3 J
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
0 P, {+ y+ n! Q/ e$ z- Z   {" I7 l3 b& s# x; c" M, [1 k3 N
       cout<<*it<<" ";! g) z5 k% ?; a8 Y0 r5 G' Q- A& l, O
   }
( Z$ W8 Z; u3 V1 t: f   cout<<endl;
- Q* b0 C  q* g; Y4 q) ?5 L}1 S8 R! r2 c2 Z5 R6 ^7 A, m& P8 o
void test()3 r( K! [& x4 V6 Y
{2 `' \5 a  B* s2 X! S2 F% O( @- Q
    vector<int>v1;
$ ?& U8 f3 E6 m$ E* m" o3 N8 b" e8 K& U& c3 Q' f
    for(int i=0;i<10;i++)
5 @+ y1 y: a% V% I7 H5 D  S! I    {
  H# ?: m; W1 Z, ]        v1.push_back(i);8 {, i" }, C" u8 G" {6 W7 }8 F
    }
, ?; V" j5 b5 S5 S9 {+ q. {4 ?    print(v1);  R) n% `. q! O
  //赋值操作" F! V2 {1 _' q0 E! }
    vector<int> v2;3 \2 s- [# p4 @# n* l/ F
    v2=v1;5 }$ ]3 n1 k/ p
    print(v2);
/ D+ @# B, H* `0 g: c) n   //assign()
1 Y) y& |1 C- d' e4 o) N# t    vector<int>v3;1 U3 v/ `6 U2 Z! p: y: I# b
    v3.assign(v1.begin(),v1.end());+ W! \7 L! {% H) m- k  M. d% x% k
    print(v3);
( ~' Z/ t& T; j) V; Q  u' H    //n个elem方式赋值
" D. D( I5 J3 n- N    vector<int>v4;* A$ l, T2 H& ]" a3 O- G/ v) U$ Y* x& x
    v4.assign(10,100);  I7 G, I) e4 @0 z. w' v
    print(v4);+ d% t' D! M1 Y/ g
2 g8 [2 Q; s; I5 g2 m

; V6 n4 B! ^/ K5 L0 B% G}
/ ~' R& q/ K9 f( \) {+ g7 ~int main()9 u2 `" t, T5 K6 q# {2 A" f' @
{
5 P/ G( v% R0 b6 s  test();  [- s* i$ L% v3 x+ e
}
; x$ r# P. u3 |. Q; u. N- j$ Y) H4 h% K0 G) C6 s0 ]# y, \

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
' H9 D% u4 B  L, G" _0 1 2 3 4 5 6 7 8 9
' Y3 n6 y8 q5 F. R3 v( q$ N0 1 2 3 4 5 6 7 8 9   T. N  S9 l( H6 y' r
0 1 2 3 4 5 6 7 8 9
# e. T$ E3 M0 `8 y100 100 100 100 100 100 100 100 100 100
9 _$ N8 M! L3 r( d5 w& _/ H; r' W, \7 t# L

四、vector容量和大小:

1、功能描述:

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

2、函数原型:

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

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

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

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

  • resize(int num, eles);


    5 x" n+ p& ?5 k5 B& ~  [* z

代码应用:

#include <iostream>
& S3 u# A( |% E; p0 ]) ^1 H#include <vector>
1 i) ^: a" K2 A! L' M9 uusing namespace std;6 D4 b: X7 O( q- z+ K
8 O3 {% P$ w8 ^' R0 \
void print(vector<int>&v)- m2 u; ?0 w# f( \0 n
{" l6 m* t' y- _
   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
9 `+ t, h* r8 g& B9 ^   {
) a& V. H; S) L7 a0 R       cout<<*it<<" ";* P9 [: y! a( z' Q' z) @
   }! p9 z& v  ~) h
   cout<<endl;1 j3 d, c3 B$ t' g
}
- g# K% |% H: @/ B. [void test()
5 j3 f6 q2 x6 |3 \2 S) R* I$ \{
" w# q* d$ l% H2 C9 M9 N5 t    vector<int>v1;( U8 v. n: d& Y0 O! c1 z

6 Q$ S- h+ J1 D" u* P    for(int i=0;i<10;i++)0 t* K, G6 C+ M' i: n8 D/ W2 o
    {# l% C  Q) t8 N8 g9 r; g
      v1.push_back(i);4 y' v+ n" x; d  ]' Y! F
    }2 {& y% \: G* _  u, ]" e. N
    print(v1);
$ j( a% A, \. u  o   //判断容器是否为空6 X& B& v7 y% f% K2 }4 z
    if(v1.empty())
% K. ~- A) p8 ]3 w, H$ {    {/ f0 n% ]5 j! ~# c3 ?2 u! D+ g
       cout<< "v1 is empty"<<endl;
2 A+ v$ W7 z9 a9 }; n2 e    }: y& g5 m) Z7 L
    else
" x0 _9 r/ i8 E* ?+ P# L  J    {# q' O* c! |# s- Y" q9 w
       cout<<"v1 is not empty"<<endl;$ B! P, l; J% o! z
       cout<<"v1's capacity is : "<<v1.capacity()<<endl;/ v, w3 R+ ^7 n0 g  d2 \
       cout<<"v1's size is : "<<v1.size()<<endl;
  ~3 t: s( E# N# a    }4 u$ _% A: t; z5 F& |9 S( j9 ]4 g
     v1.resize(15);
& T* R9 I+ [; k2 Z    print(v1);                                       
# T6 ^" p- T) \* @$ J8 w    v1.resize(15,100);//利用重载版本,可以指定默认填充,参数2,如果重新指定的比原来的长了,默认用0填充新的位置2 \9 f1 J, e: n+ O% ~: T% R  h
    print(v1);" f' ~' U: k, v& W

% J1 p/ j. H; x& p  Z8 d% `: ?    v1.resize(5);//如果重新指定的比原来短了,超出部分会被删除掉8 A. S+ \2 O- s; k" ~2 J* b% v
    print(v1);
- [- \; g5 J( {0 ~+ |}1 r) m4 A  D% c+ n- x$ r+ J
int main()
% p3 s  q0 Z* W% O* G5 Y{6 Q0 _) Q* e/ V9 b+ `
  test();) t0 Q& U, o' N. n5 g
}
) W* ~, S0 T+ S1 `0 b! h

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
& i& J3 q( ]7 z% w0 1 2 3 4 5 6 7 8 9 % I5 Y, L) c4 B% I" j
v1 is not empty
0 w$ q! G, j+ T! b9 z4 o0 n5 xv1's capacity is : 16, Z$ f6 p! Q0 o7 r4 ]% g
v1's size is : 10
6 r4 s" r! [- ?/ D0 1 2 3 4 5 6 7 8 9 0 0 0 0 0
* i6 [0 u( E( B6 i0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 6 |5 p+ k* }3 K9 i# K4 }* ]
0 1 2 3 4 6 z4 s  ]" ]& g- P% X, i' c! M

- t3 h7 ?2 r! f* c9 x5 F

五、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之间的元素( B9 R3 @. W) r9 p# D: Y

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


    & q/ u+ F8 k+ \  s" K: k; D8 G! g% D
#include <iostream>8 z" T! B5 @- S2 k( |
#include <vector>+ P% v% \2 S# q
using namespace std;
$ w$ Z9 ]- ~/ s) v+ _void print(vector<int>&v)
8 b; Q/ d; C  @: U! C8 y8 X6 R{
6 p1 W/ s1 K' ?  L; G7 G: F1 \. u   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)3 ?1 n# c9 ^) S
   {
# C4 F; Z, `8 k. n( s: N5 g1 _, B7 B       cout<<*it<<" ";# V. b7 A- I8 V% K2 G0 F. J
   }$ e  k# K+ i- r! p. ]) S4 \8 w, I+ c0 m
   cout<<endl;9 U0 Q. e9 ^; }& q
}0 Y7 H: z5 e. d0 l9 \
void test()
! B) k) t$ T5 D: z$ j{/ c. D; k5 X; G# H
    vector<int>v1;
( x6 y6 D. b; [& `! ?& F8 r9 R    //尾插
' G5 L" e% @) S) a$ @    v1.push_back(10);! Q: Y$ \* T/ M1 M
    v1.push_back(20);
. e+ R! _; w  Z6 c* Y    v1.push_back(30);
* a5 g; h5 T* V  {7 b    v1.push_back(40);' ]% Q0 V9 e5 Z
    v1.push_back(50);
' w* e( z6 y, g( ~  ]# B4 L* G0 a; a, p$ T- C6 |
    print(v1);7 M, P' \$ ~. P1 i( W
    //尾删9 X% ]+ X# ^. L
    v1.pop_back();
- y6 p, n9 h8 w8 C; R    print(v1);
3 x* K& Z6 h! c8 Y6 V% R- `  z- V, Q( X    //插入,第一个参数是迭代器" ~$ A/ _! f; P( w# a1 i
    v1.insert(v1.begin(),100);
1 s1 {" a1 u6 U$ p    print(v1);+ C8 z4 M5 J8 k4 D2 ?7 Q

. D* z0 U, Y3 k    v1.insert(v1.begin(),2,1000);
9 C. X3 G' }; E    print(v1);
4 O8 Z8 D, g' |    //删除
& W9 F0 B; X3 K' D. Q3 q    v1.erase(v1.begin());3 W; g; i9 a6 \! i
    print(v1);
. t0 v: |, ?6 b% U   //清空
  V1 ^( p2 d/ d1 Z) L. ?: R    v1.clear();
0 |. A. ?5 ?% s( p    print(v1);7 t1 D; ~! l( E- P
}* k, D7 U7 i7 u8 M& C
int main()  B; i; b2 X$ l$ M4 }/ @% L  O
{% w% }% F4 d8 \  {2 N
  test();# p! q; X9 ]2 ~3 y
}/ Q3 l* f% M' N& z- _/ H' J

  e0 o. Q6 E+ r7 d
结果输出:
' O/ L* w6 R6 P! z
root@txp-virtual-machine:/home/txp/test2# ./a.out
2 _( ]1 r8 v0 I3 |/ ~: `) T10 20 30 40 50
3 H% M, d7 r2 X2 z2 I- [: ~10 20 30 40 - B3 U9 B( T) u8 `
100 10 20 30 40 " ]) [% G8 a. q. q' I" }" Z7 J
1000 1000 100 10 20 30 40 4 a2 L% P: k! A: s' a: ^
1000 100 10 20 30 40   m5 v, R& b' B- L# e
2 D1 v9 H; P) G+ _) j
) X2 b9 u) p1 A% u: a- {" d

六、vector数据存取:

1、功能描述:

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

2、函数原型:

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

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

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

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

    0 r$ j* c+ i, f8 p' x' Q  S" R

代码应用:

#include <iostream>" l& {1 o+ d9 t3 n
#include <vector>
& y# ]6 f& M$ r# J4 cusing namespace std;
+ m. E" r$ l/ \$ A9 q5 U/*void print(vector<int>&v)& p0 ~9 G8 H0 g" v
{
! p# s- B& b* C/ L! i7 D" [   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)" ]7 U$ U8 H! q
   {
3 `: }  L' W$ E8 S/ W- A: E1 [       cout<<*it<<" ";
- N& C) H' v* b' N5 O/ P7 f! b1 ?   }
( J; n" L2 V4 P% t: @' C% l: Q   cout<<endl;
# Z! E3 g1 z* F" b( P2 e}*/  N1 e' `* U/ ?7 P$ s
void test()8 ]* `* a4 E* C3 }6 V5 d! u
{
  j0 k2 ?& m- u* [; j" M    vector<int>v1;
# T) X7 i( o# Y+ }  {# l    for(int i=0;i<10;i++)6 Z+ f+ a4 G+ R
    {+ L% F6 @0 F- ^  t
       v1.push_back(i);; ~" \3 Y! ~8 Y7 U% m. O
    }# D$ W4 R; h+ r' U
    for(int i=0;i<10;i++)
" V1 m9 R- H8 o/ R- k    {2 n/ O* Z) V2 h5 {  m% N6 W
       cout<<v1<<" ";4 R- V, c6 A% m( V) {% W8 V) u
    }
8 J. G# v1 B2 s; A7 t    cout<<endl;0 `$ N9 L, I3 X, g8 V0 [
    for(int i=0;i<v1.size();i++)/ g& p( v% t6 m$ O2 N
    {% q# S  U; v3 N* I
       cout<<v1.at(i)<<" ";( I+ m4 z6 \6 W* g: s
    }
5 Q; v7 w5 W+ J! u" ]1 O    cout<<endl;
* w! |) r# X& A/ W% H
* t% S5 Y& Y2 [: s) E    cout<<"the first elemt is : "<<v1.front()<<endl;
4 F( K9 u2 C/ ~4 X    cout<<"the last elemt is : "<<v1.back()<<endl;* G2 W: g- W( z/ h. q
}
4 g% K0 P* L$ _2 h. {. Sint main()! b, z# k9 E4 k6 H3 b/ K, [
{
  O' L( Y+ l+ f4 O  test();/ P! C; l9 i6 W8 ], W) E1 E- L$ ^
}
; L2 O5 N, l: L# U; a, I7 x" I6 }% }

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out! E3 I8 Q7 F0 ]* R
0 1 2 3 4 5 6 7 8 9 2 r  r4 \' K$ S. U7 Q7 i& f
0 1 2 3 4 5 6 7 8 9
! l, J# d) I- `the first elemt is : 0
) c- U0 ?/ S, {3 y* sthe last elemt is : 96 M' u* v: E9 h$ T, m
( ?0 G+ f& b: I9 {
七、vector互换容器:8 b) `9 a* s0 \! h4 g9 ~
1、功能描述:* x4 l: _6 E# g
   实现两个容器内元素进行互换
) C( V" ~  |3 _( t" J 2、函数原型:
; I% p6 ~9 o, I, p7 w/ _) k& F   swap(vec);;//将vec与本身的元素互换% m+ i% r# o% u" l

代码应用:

#include <iostream>. P0 F- D7 D/ A( b# I/ |
#include <vector>4 r9 A1 @+ |: ]8 V' L5 E5 \
using namespace std;
; N2 K+ v4 x3 S1 O$ ~void print(vector<int>&v)+ H2 g9 G# ]4 U. n
{
( y$ y; {5 p' [( f   for(vector<int>::iterator it=v.begin(); it !=v.end();it++). x* v6 R/ P; a
   {* M/ H0 q) _& O1 a) ]! s7 G5 D% ~- A) M
       cout<<*it<<" ";+ k9 B$ @; R: K. p$ S7 ~8 z
   }8 j: i0 W6 ~  E9 u2 y8 e0 S
   cout<<endl;1 O. w0 u$ }6 A' [, t
}
0 n9 Y( U; x2 A$ wvoid test()
3 j0 \, |) t/ }2 L  W{- B7 \0 _1 C! d! F4 _+ Z
    vector<int>v1;7 }( ^9 ?7 i5 D
    for(int i=0;i<10;i++)
  t; U6 \4 q& r% d0 G    {
7 C9 L$ W4 b/ e' H4 R       v1.push_back(i);9 j6 k6 U* S. y. Z
    }: |  ~, K, [7 t
    print(v1);
8 v: |# ?: }1 S& r8 u* I0 U& M5 C+ b" |+ y
    vector<int>v2;
6 C- W' {( ~9 `    for(int i=10;i>0;i--)0 G2 q, J* H' d- u
    {: l) Q# A7 E# |$ B; t- ?
        v2.push_back(i);. _& ^0 P+ A. K" W# Y: e
    }
" W& |5 T. `0 A3 L  A# L    print(v2);
' x$ z) a! b1 M) g) P2 u0 h" i/ ]) F& p( i- [
    cout<<" after swap() "<<endl;
, K: u* O- ~2 G# u7 _1 k    v1.swap(v2);+ l$ B, E4 L! q+ a# i
    print(v1);6 {2 F2 r. I1 {% A* t
    print(v2);
% \+ q8 @2 x; Q! c& n}
' m! M$ H& S5 b/ ~" a0 u( Wint main()# n, o, `1 k$ X) R& g
{' P5 L% d. M& R/ z' ]% Q" m- W; u
  test();1 }+ B0 l; e) B, c
}2 F) g6 ?5 Z6 @/ h* b' d

: ~5 w+ q' y4 m- \! B

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out7 p, \% Y# @/ U
0 1 2 3 4 5 6 7 8 9
; f% v: R3 v) P7 n4 h10 9 8 7 6 5 4 3 2 1
7 F- V/ Q/ d- }. I8 E3 Q8 O after swap() 6 q/ |% `% ^$ o) R
10 9 8 7 6 5 4 3 2 1
+ l4 v( ?$ M$ O6 |$ |( T  S- z0 1 2 3 4 5 6 7 8 9
/ G/ I4 O8 x" r8 R6 |
3 h4 d7 A% E" P# M

利用swap进行收缩内存空间

#include <iostream>
( |, e3 D* z0 F3 {#include <vector>1 r( J7 b0 r4 q8 B6 ~- N3 h; p
using namespace std;! h- Y. s, l! I3 c, T- d
/*void print(vector<int>&v)
! g( m" r- u1 H+ a6 w/ r{
3 i: ^2 c3 r( C7 @5 ^" R; y   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
6 ]" R! W( y- [' j4 T2 i1 L+ T   {+ {2 M4 G: h( S* S9 |
       cout<<*it<<" ";& g4 h6 w- d5 F6 \- y6 }
   }
: `; d, l3 F4 j$ F( z- Z   cout<<endl;# v$ d7 V& P# l2 G1 I0 d
}*/! n  a0 B9 w# V- k1 x; ^1 W* a, ^5 C
void test()- S; r) ^% z3 z
{5 K* r6 S9 n) P! U. P# I
    vector<int>v1;+ W/ v+ [% c) R8 j* _8 T# {( k
    for(int i=0;i<10000;i++). u3 w* r; P4 e( v+ s2 W) j
    {- i& c4 i$ }9 ]0 ?/ q( r3 S9 k
       v1.push_back(i);
) b+ q+ X2 I' J: j2 b9 I    }3 G) p9 p5 h3 W" P5 o" \: E
    cout<<"v capacity is : "<<v1.capacity()<<endl;) M6 j" ^, \" R: A+ z* N
    cout<<"v size is : "<<v1.size()<<endl;
4 Z3 h" A2 R3 K3 c9 r* L# W2 u1 c! x. O8 s2 t! Y# s
    v1.resize(3);
2 ?$ I) W* ]" k% c5 V" H    cout<<"v capacity is : "<<v1.capacity()<<endl;  v' s' x4 y+ I
    cout<<"v size is : "<<v1.size()<<endl;$ J4 p& N9 X  X! b9 k

+ C' `0 Q& V7 v& D. l) i& B    vector<int>(v1).swap(v1);( a+ C' [5 F' b: z7 ]; w4 z9 G
     cout<<"v capacity is : "<<v1.capacity()<<endl;
: m. Q! I5 j8 Y5 O" \    cout<<"v size is : "<<v1.size()<<endl;
( F, I  d8 Q3 m; b; B9 A3 B
6 D8 D5 R: `. j1 x5 {3 t3 G}# a! i" |5 B& V; d
int main()& h7 d& x) ?1 @8 A
{% d! L3 K: w; [& ]% I  k' q
  test();
# g( q# i# T( v1 k+ w}
/ W6 [" U+ r* L: j: @

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
/ ?! y( s  B) X3 _v capacity is : 16384% }$ p; O( c4 w, N2 U8 Z& t8 a4 x
v size is : 10000* I+ x5 Q- L. a/ l  f' ~" l% H7 y
v capacity is : 16384% S  X' a! C: I  d. f
v size is : 3
6 i7 Q$ N& b! ~) X' N: I6 x7 d0 Ov capacity is : 3  f7 B2 O  E; b4 h& K
v size is : 3( f" n9 r! R5 W, i+ x+ e/ P6 L

6 P* t+ ^' N( r( ~

八、vector预留空间:

1、功能描述:

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

2、函数原型:

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

#include <iostream>
. }) L6 y$ y1 ~9 \#include <vector>
# q2 Y; o9 J+ g  I8 H; y( busing namespace std;
* K. I6 J$ U4 d5 d' `/*void print(vector<int>&v)9 N4 {+ F& x& E" L
{
: Z+ Z# y, b( Z+ e   for(vector<int>::iterator it=v.begin(); it !=v.end();it++)
/ y. u' R! N' K0 q' ?$ }) o   {% i) T7 ]1 O  u) w. h4 I9 f
       cout<<*it<<" ";0 G2 |3 R+ T2 A: a) t# d4 }7 ^
   }
  D- s' |, P2 H, {6 K   cout<<endl;, L' c5 X& @9 b0 q
}*/0 N7 c9 v% W8 A7 A2 x8 ^' o  c
void test()/ \5 F$ l" o7 h9 ?- \/ a1 \9 T
{9 ?. N& q" {" ~" O4 ~7 i1 G* o/ g
    vector<int>v1;* G6 V8 d5 T1 ~# F
    int num =0;//统计开辟次数9 v& e2 N+ a7 Q8 G* W0 |. f% t
    int *p = NULL;" n- d$ {1 Z( k( U4 g. q
    for(int i=0;i<10000;i++)
6 X' v' J0 }0 f0 m    {
, x/ v2 A% x  A, [, x        v1.push_back(i);( `" n- w$ D. K6 C
        if(p!=&v1[0])
% m, w% p4 S: q4 C- A! z        {8 ~) D% K" r/ P  p
           p = &v1[0];
. K1 \& _0 c: j; u% |2 D           num++;
1 P3 y" p* W( d. H: R        }
6 M1 a( i0 h7 g9 C    }" e; p, P) k8 y( U" j; @
    cout<<"num= "<<num<<endl;$ B3 j% e! I3 J0 O9 E$ Q
}  N/ y, R* J/ |  h7 |5 c  t- r
int main()
- l5 \: y2 J& c3 b3 W# ~4 c{
& N0 E1 i& H5 y( j  test();
- Y' g) V+ C0 [5 |}
8 R2 t+ J5 g" B5 L8 d6 n6 ]0 s

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
2 G  ?4 p: F! l  O" ?# bnum= 15

% I3 u4 K& x5 B) v& B" V

; K& b3 E' D! z5 _7 g$ }9 y2 {+ f1 m
收藏 评论0 发布时间:2020-10-5 21:42

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版