|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数# ~3 W; t( |- G' S' L
6 J( M9 I* I: O3 R
t2 ?# j- r P; I
insert(); l+ t5 _3 G2 P8 v( [* F% E
% e2 w8 n9 m3 e9 x8 U
% ?! F; J6 S$ O b# D5 J1 [insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
* K: P1 i3 _+ h
, p, b5 B2 U: I- ~
3 s, X6 x$ B4 aiterator insert(pos,elem)
+ x( A7 @1 X( p, a. J" b! I/ g( l在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
- h* {/ Q5 R( p- J3 @iterator insert(pos,n,elem)
9 H ~2 X; C# U9 k1 M& T T% I在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
: K8 @4 E$ Y& [' g& oiterator insert(pos,first,last)
4 A8 m2 G! q$ m7 ^$ Q3 B在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
3 C4 ?( V2 O Riterator insert(pos,initlist) 1 G+ p1 N; Y& V& Q, S
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
7 d8 C% ~0 p7 j- r m' q9 ~2 b$ P1 W; q
4 T: ]! _' r* y* {, M- V3 \& {下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。0 ^( I- D6 O7 j" g1 x3 x- ^
X; ^: S7 \) X' @& B, G
+ | U: }. {( Q7 k
#include <iostream> * ]: C, k4 G6 Q. F! h+ ~% Z
#include <vector>
0 O# x7 f: R9 x' v6 x& t#include <array> 1 [4 H' j' F$ J3 P
using namespace std;( s- x( s8 o5 D6 C" K: f# A
int main()+ f! z# F" ^" d6 C
{
% x4 Z4 }6 ]3 h3 A8 U' ~2 o% ` std::vector<int> demo{1,2};, f, X6 E+ ^, T3 L% H
//第一种格式用法
- l" I9 I* r1 B demo.insert(demo.begin() + 1, 3);//{1,3,2}( p: n5 K5 n! p, M0 A) W
//第二种格式用法
; V4 y' F0 Q, z% _, ]* j demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
9 N/ m6 X& Q4 B //第三种格式用法5 C4 s$ j* D3 J9 [/ N
std::array<int,3>test{ 7,8,9 };
+ O7 \2 ~% V( {: O/ U; \ demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}
! s/ @- E1 C- y% v8 x; k //第四种格式用法4 h4 G- W9 j9 m9 Q- q
demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
1 N. z% K8 Q$ I( K 0 K$ m/ K" E, ]) t$ \7 t9 P/ ^5 s5 S
return 0;4 A5 i6 P3 Y) \& @2 `1 A
}
" d% M$ Y Y6 w* e9 m0 |" K" v6 C+ Z) a8 Q o) A* J0 O$ S
7 n# c* H1 U3 Y$ V
emplace()
# i. {, N1 E5 g0 ^emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
+ c$ [9 ^; L- B9 l! z7 l+ O; E9 p1 w% E0 ~2 Q5 D! n
: d3 O5 p+ h# H$ o该函数的语法格式如下:
% k5 P+ A% Z+ O/ {( Kiterator emplace (const_iterator pos, args...);" o. G, d# C( b/ o. C3 C
3 g. F) {$ O$ }0 o0 A4 O0 f: s" f: c. l3 a
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。; V2 k. f, h: a
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。, H. t' U8 R; Y% d6 N
#include <vector>
& B/ T5 r+ i6 v+ ]" ?' a#include <iostream>
# r5 |6 \2 ?2 K" J" W0 g6 P* uusing namespace std;% Q3 x h5 N. g4 `" p' f" ^
int main() 6 f% r: l9 B8 V8 T
{
5 m [' ]: J; u std::vector<int> demo1{1,2};
1 T( Q3 u8 d! M* l* ]7 K# h //emplace() 每次只能插入一个 int 类型元素. W2 V3 d0 T/ H: a7 V9 i+ ~
demo1.emplace(demo1.begin(), 3);
3 }/ C. U% P% [; ^) ?& w7 ~ return 0;& {, Y0 i- o$ B. A, F+ c$ ` g3 K4 ]1 e8 B
}
: q3 d( X" Z: u) D
3 T; V" l) o6 |" U% Z( \& C- [0 \# s6 |
结果 3 1 2 4 ^8 m0 h" |3 M" D6 z
7 F' q1 @2 m3 _; {
0 [( J: ~; a$ \7 F$ f' }% | |
|