|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
vector容器提供了 insert() 和 emplace() 这 2 个成员函数+ v" `* O0 h4 |9 M) }* V
4 O! n8 E/ a" t( x% _' q
* J# V& u2 W5 g6 V. W! e
insert()
& c( K. f2 b$ V" T _. l* K- f/ w% E
% V" l# u. W% \0 S
insert() 函数的功能是在 vector 容器的指定位置插入一个或多个元素。该函数的语法格式有多种。
7 c) N& A5 t1 o) s; ^' F) u4 C* u
' s! S& S( V- {" q& U+ f/ d( F) }2 C' Q1 ?, R/ N, }- g
iterator insert(pos,elem) # `2 v4 O0 N, x [; A# i
在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。3 `% L7 t ^# i1 K; F5 N
iterator insert(pos,n,elem) # c7 O8 C. v& C" c2 w
在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。' s. ?" g6 K2 b
iterator insert(pos,first,last) # \% h& _: N0 l7 m' L
在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。4 S1 p$ o; @; y: k; W; j' e" S* k
iterator insert(pos,initlist) 7 Q3 _& Z! b4 Y" B% ^- Q* \- P0 h
在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
7 b3 k0 o" D' I: V J3 C1 b+ k! l# ^6 N
# g/ B/ _: J0 ^4 u8 n. s下面的例子,演示了如何使用 insert() 函数向 vector 容器中插入元素。
" r" o5 a, h( [. y: z3 B% K
9 h1 g' t% e. o+ N4 j& d1 v& j8 G8 ]) D. ~
#include <iostream>
. B# o3 q' U$ H#include <vector> * _6 L. b! c2 P u
#include <array> 6 G. H& Z/ K6 W
using namespace std;
/ T7 `- j7 S' y+ V* a# Lint main()' F6 I& i) r& \" \5 b- t; j7 i) D
{
2 X- Z/ z. i A' _: [3 \9 O std::vector<int> demo{1,2};3 E1 a' s3 V- J- V: e
//第一种格式用法
& w+ t+ f1 V& B# N demo.insert(demo.begin() + 1, 3);//{1,3,2}
: N; z: G1 \/ w( j% t* r, p //第二种格式用法
" Q/ m2 a N4 _# ^5 J ^ demo.insert(demo.end(), 2, 5);//{1,3,2,5,5}
- n' l D0 v$ a+ M* x. c& N //第三种格式用法" o, U/ D+ ~# u+ `; g Y0 p
std::array<int,3>test{ 7,8,9 };
2 S8 {6 M. v4 f% U demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}$ A: n% s, h* s2 C" {
//第四种格式用法
% x0 Y p* i, a# [ demo.insert(demo.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}3 E7 j" U ~; ^
' @" O# ~9 R4 {, O return 0;" q1 i9 N- k5 @- J) H
}
) D- G Y9 G+ r9 [8 z) S" Z* n, d+ n a9 V2 g3 K
8 E( |8 X. c$ zemplace()
1 s; [" D1 J5 }emplace() 是 C++ 11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
" e" q9 v# _1 [* g. N5 h+ ~
8 p. H; f- @) `3 A+ D; Q( H, j' F) J+ y: D
该函数的语法格式如下:
+ {! P% h( r% z. L: @' ~2 Witerator emplace (const_iterator pos, args...);% N' F' o* g) X7 t
* O9 W8 A' ^$ ]" G' O' F4 R& G: f5 d" t) c- H/ {
其中,pos 为指定插入位置的迭代器;args... 表示与新插入元素的构造函数相对应的多个参数;该函数会返回表示新插入元素位置的迭代器。
) ^0 b% c/ L. R' I简单的理解 args...,即被插入元素的构造函数需要多少个参数,那么在 emplace() 的第一个参数的后面,就需要传入相应数量的参数。
" F3 ?: b- c p5 a#include <vector>
" a. `& B' x4 _ P& U#include <iostream>) k# b, z! |% [
using namespace std;* m: G" h" ^5 ^0 L3 f
int main()
' S3 e' p! }, U1 C4 j# o{( Y7 i* ^" P! k$ x# V
std::vector<int> demo1{1,2};6 B) v8 w% g$ o7 g# n
//emplace() 每次只能插入一个 int 类型元素 D9 b, i; E: E* J; G n
demo1.emplace(demo1.begin(), 3);
: |0 s& ]& N: ? return 0;
9 S# J) u: F* f7 Y; w; m}6 n: O7 O. {2 U, ]
! V/ B; Q2 K2 s( P5 _# H8 N& }, C( N' N9 Y
结果 3 1 2
5 E3 f# y8 y2 p% n1 u2 c
, V4 l, }$ n( p4 ?' R/ A9 }& p5 U' h) b4 |1 G* ]% b+ Q! J
|
|