|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
. U. a: _, W j
6 S- ]5 {- A& L( p: A0 ?& l
& [ I" ]" ], v; B( y) o) w2 pinsert()
0 w4 q" c2 Z/ o) a* b- M! Z( n) ?# h" c0 E" K; T: [+ Q
2 \' }! w4 A8 J. vinsert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
% U! a6 \" j. q* I' Q7 n
. p9 o! T1 [( \& N1 w C) k6 L( k4 |% C# F- |
iterator insert(pos,elem)
% F2 y, `+ `+ I7 v6 t在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。, o0 n/ Q1 q/ D" D. Z' s8 ]
iterator insert(pos,n,elem) / Z9 `, ]) k" x/ J4 }* R$ r: s4 g
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。) S& p% U2 O! N
iterator insert(pos,first,last)
5 ~% p e9 O ]# G& i5 U在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。& V& v4 d" V, k3 y( Y' T0 t/ O7 ]
iterator insert(pos,initlist)
8 K$ N, o* L( A+ f! n在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
3 k2 }* I2 a! K) I8 B$ r% l* n8 r1 l
# H8 Z# g8 f5 d5 E( M
, h0 i _- M( z! \ K f& Y2 y下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。! u- P. W$ N) F9 g m9 i! z3 m
# `$ f3 t' Z" m+ v! X V& Y2 ?
, J, B% ? K" i$ z8 c#include <iostream>
6 h; b g3 P$ D5 o \9 d9 j#include <vector> . p; V/ Y0 \ z5 k, r# s3 [- l$ j; [
#include <array>
5 q3 V$ ^4 n3 H. X& h2 b$ c% ^1 Q* @using namespace std;& x) U6 E# X3 ?0 O4 K9 L
int main()
% N4 J6 B6 X9 Q9 K8 A4 S5 e! L{# i! S) d- R- z* z) K0 S0 ?0 j
std::vector<int> demo{1,2};
/ ~' `# H% j8 a5 q4 Y //第一种格式用法. U. ]& g3 K+ g& z
demo.insert(demo.begin() + 1, 3);//{1,3,2}/ v3 x1 ?1 `7 [7 [
//第二种格式用法, t* H2 C; n, [/ d, D2 @. z2 p
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
( P% g1 d$ K4 J i- v/ K/ M //第三种格式用法
" z: e7 m. u! P: {3 | std::array<int,3>test{ 7,8,9 };& S0 O: v! x) ]/ m, h* T* ~
demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
7 d* V3 V1 G' }2 z* U, |, j //第四种格式用法
5 i8 x- f( K* N& a" `8 n8 W demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
: q. \6 D( x! u. M
9 j4 _& f3 M5 Y8 v- ^/ z0 r$ F8 k# T" C return 0;
8 x% F" I P& m- l2 h7 U, R7 `}
' b* r7 _! d7 H, L( f& ~4 S' e) j: u) h3 U& o
4 j' Z6 R; t- Zemplace()
7 w9 X$ A0 q! ~" Y: y; z* C. Kemplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。# z* S3 \% m* N4 Q( f/ ^5 N
# p2 }5 y' b# D! v& p
$ s) _8 ]4 J+ L: a该函数的语法格式如下:
2 ~. N) ^5 n" U) Q9 c. p* citerator emplace (const_iterator pos, args...);
. u4 c: h: j: T! L- s3 g* `
4 t# L. M4 V/ Z& J& }; R# j; C0 I( Q; Z
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。: a4 [. s" U- ]$ B! C4 j: Z1 g+ X
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
9 h; t4 q+ `7 l0 l- |$ m1 |#include <vector>. p1 a6 |6 c4 E0 W0 V) v5 j/ A
#include <iostream>
7 ]% z+ _: ?/ ?" `- X- H4 q. Zusing namespace std;
) a* O' F @% F7 d" aint main() / ~+ i- B3 r, s, g
{; G% D$ w' Q7 H0 z- U. E8 J
std::vector<int> demo1{1,2};* D+ j S" v* j$ ?
//emplace() 每次只能插入一个 int 类型元素$ O' |" q' b! o& }/ H! a) a
demo1.emplace(demo1.begin(), 3);
. N( T: D- j- [& @3 H+ Z" g return 0;6 n8 h4 v, h. Y( q% D5 N# q: j1 k
}1 A" M. w3 j* R$ u K
8 Z1 Y/ a9 z1 {" p
; ?) L3 y9 h: N) N9 [结果 3 1 2 7 O' Q- K3 G# E. T
9 l: G7 q/ }. [# ^, z& B
# h1 c. b) z* ~3 k6 U
|
|