|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数
, S5 |/ b8 G8 x2 a: k1 B6 l7 }7 d. } a9 w( K8 G0 }
& y, c) c1 J) K1 h1 M
insert()
# R3 z4 L+ B6 Q2 o
3 }) R3 X4 \ j9 t/ V& z7 o6 `( J2 _! B
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。5 F$ d, r4 T% v$ {- C6 f" s4 o
/ n" R: m$ H6 q& u
4 g' x( m' U5 Z
iterator insert(pos,elem) : n0 Y+ p' Y+ G/ r
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
3 _. D h; H3 `iterator insert(pos,n,elem)
2 S7 g: y% x3 s4 h1 z+ {7 o- ^在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。! e( L8 K) l# ~3 E; x/ {. f. U
iterator insert(pos,first,last) 3 p& G- n# K6 D) ~
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
9 j3 y; P& J Siterator insert(pos,initlist) ) K7 \: `& A: E5 b
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
0 U$ c9 u" g9 u" R0 t, o0 N
5 G$ |* t* W* G. J m& {- U; P! ]% R4 Y* a" v3 w+ V$ t- h- D
下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
) m4 L4 G' @! C% @$ u/ y8 _1 k, }' I" h3 _, {6 s u- |
5 |7 D1 y2 R, I: ~, M, |- {#include <iostream> 9 W+ {. m% m; \7 E8 Z
#include <vector> 7 ` f( ~3 H2 ^& d& A
#include <array> 4 h- ?5 O4 u% ?/ t
using namespace std;3 }* V0 `' i$ ~8 ]' n
int main()
}( K4 h, C# P{
% D, b0 b+ b$ w6 I( Y( \ std::vector<int> demo{1,2};, N. {, n. k' @3 @, O
//第一种格式用法/ E% j5 Q; x% A7 g
demo.insert(demo.begin() + 1, 3);//{1,3,2}
$ W! A( U/ M1 G; T, B //第二种格式用法# \, S8 U( R8 }' a6 y- O
demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
* e5 |; J! c" [* p3 ^) _, Y //第三种格式用法
# ~6 O6 Z' L4 h8 u- g* V3 E std::array<int,3>test{ 7,8,9 };
& ]7 p/ m Q5 H+ a* e demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}5 s; @+ ?% q; r3 j4 u) l' s' C$ X
//第四种格式用法
- T2 i3 [6 ?8 x demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}
! }/ D/ Y5 z. `) r* y' Y8 K & e5 }' x( Q T* x8 ?
return 0;
' ?8 y- e9 j4 w% E1 q; U}% H* V4 _- P, h0 S# m
/ A, y' ^1 u1 i3 L: c% Q, U; _
: l8 Q, v. s# R; Y. N$ s1 \emplace()# l- ]' [/ T: i6 r; Z* ]9 p9 c
emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。) ]% A S3 `1 p* T3 x+ [4 N
& ?; y; x5 D0 m0 x6 i7 P7 ?' |. l% u9 s: J
该函数的语法格式如下:! ]) {! @* x$ I8 T* N2 V l
iterator emplace (const_iterator pos, args...);; W! y9 ]. N5 k8 i3 f( l
5 @! g: j4 D/ X H' a" K" e* a9 n( F/ p( m# A( z) G
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。% }6 H( J1 i/ f
简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。3 }# k% Y- Y2 F! _0 h. G5 _$ C
#include <vector>
) B& o8 G. W. B. ]#include <iostream>. T7 Y1 V/ B* F }/ s# g) r$ R
using namespace std;% @6 x2 ]/ ? t# P
int main()
6 m' U1 \+ ^! l/ F6 r+ ?+ u{
2 \ B7 X7 z1 B! L std::vector<int> demo1{1,2};( O/ T( V: {# E$ d# N4 o$ R. J
//emplace() 每次只能插入一个 int 类型元素
9 u& M* U. c3 p3 M3 ?( O demo1.emplace(demo1.begin(), 3);
1 W* s( o# W9 O C7 z5 a return 0;) Z9 L! y% k9 S
}( ]4 z6 A( B3 \# `
3 E; j# L a2 k6 H. B# I- ]) q* [9 I% s: D% d
结果 3 1 2
- f, j4 J3 A1 u: R' \
( d% C* G; l# y9 W' p% q b. g! g0 _0 b2 e6 {
|
|