vector 容器可以使用 vectorName.insert() 方法插入元素,vectorName.insert() 函数一共有4种重载方法:

第一种 insert() 用法在指定地址插入单个元素

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10
11 cout << "==========遍历容器===========" << endl;
12
13 for (int i = 0; i < num.size(); i++)
14 {
15 cout << num.at(i) << endl;
16 }
17
18 num.insert(num.begin(), 888); //初始位置插入 888 ,第一个参数需使用迭代器来确认插入位置
19
20 cout << "===使用 insert() 后遍历容器===" << endl;
21
22 for (int i = 0; i < num.size(); i++)
23 {
24 cout << num.at(i) << endl;
25 }
26
27 return 0;
28 }

打印结果:

由于第一个参数是迭代器,由于是地址,我们也可以对其进行地址加减操作进行元素插入,比如在第二个元素后插入元素,我们用 insert() 可以这样写:

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10
11 cout << "==========遍历容器===========" << endl;
12
13 for (int i = 0; i < num.size(); i++)
14 {
15 cout << num.at(i) << endl;
16 }
17
18 num.insert(num.begin() + 2, 888); //初始位置插入 888 ,第一个参数需使用迭代器来确认插入位置
19
20 cout << "===使用 insert() 后遍历容器===" << endl;
21
22 for (int i = 0; i < num.size(); i++)
23 {
24 cout << num.at(i) << endl;
25 }
26
27 return 0;
28 }

打印结果:

第二种 insert() 用法在指定地址插入多个元素

最普通的多个元素插入:

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10
11 cout << "==========遍历容器===========" << endl;
12
13 for (int i = 0; i < num.size(); i++)
14 {
15 cout << num.at(i) << endl;
16 }
17
18 num.insert(num.begin(), 3, 888); //初始位置插入3个 888 ,第一个参数需使用迭代器来确认插入位置
19
20 cout << "===使用 insert() 后遍历容器===" << endl;
21
22 for (int i = 0; i < num.size(); i++)
23 {
24 cout << num.at(i) << endl;
25 }
26
27 return 0;
28 }

打印结果:

与第一种用法一样,由于第一个参数是迭代器地址,可以通过地址加减控制插入位置。

第三种 insert() 用法在指定地址插入其他容器的迭代器

我们也可以将其他同类型容器的元素插入到当前容器,如下代码使用三个迭代器来插入多个元素:

 1 #include <iostream>
2 #include <vector>
3
4 using namespace std;
5
6 int main()
7 {
8 int test[] = { 111,222,333,444 };
9 vector<int>num(test, test + 4);
10 vector<int>num_1(test + 2, test + 4);
11
12 cout << "==========遍历容器===========" << endl;
13
14 for (int i = 0; i < num.size(); i++)
15 {
16 cout << num.at(i) << endl;
17 }
18
19 num.insert(num.begin(), num_1.begin(), num_1.end()); //初始位置插入 从 begin 到 end 的元素
20
21 cout << "===使用 insert() 后遍历容器===" << endl;
22
23 for (int i = 0; i < num.size(); i++)
24 {
25 cout << num.at(i) << endl;
26 }
27
28 return 0;
29 }

打印结果:

===========================================================================================================================

STL—— 容器(vector)的数据插入之 insert()的更多相关文章

  1. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

  2. STL—— 容器(vector)数据插入insert()方法 的返回值

    vector 容器下的 insert() 方法拥有返回值,由于insert() 方法拥有4种重载函数,他的返回值不尽相同. 第一种,插入单个元素后的返回值: 1 #include <iostre ...

  3. [C++]STL容器Vector的内存释放

    直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...

  4. STL容器vector应用注意事项

    [1]提前分配足够空间以免不必要的重新分配和复制代价 关于vector容器重新分配和复制及析构释放的代价,请参见随笔<STL容器之vector>. 应用示例对比代码如下: #include ...

  5. STL容器 vector,list,deque 性能比较

    C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差 ...

  6. STL容器 -- Vector

    核心:Vector 是 STL 里的一个向量容器,可以像数组那样进行随机访问,能在尾部插入元素,对于元素的删除和插入可以动态管理内存. 头文件: #include <vector> 构造函 ...

  7. STL - 容器 - vector简单应用

    VectorTest.cpp #include <vector> #include <iostream> #include <string> #include &l ...

  8. STL容器底层数据结构的实现

    C++ STL 的实现: 1.vector      底层数据结构为数组 ,支持快速随机访问   2.list            底层数据结构为双向链表,支持快速增删   3.deque     ...

  9. [转]STL 容器一些底层机制

    1.vector 容器 vector 的数据安排以及操作方式,与 array 非常相似.两者的唯一区别在于空间的运用的灵活性.array 是静态空间,一旦配置了就不能改变,vector 是动态数组.在 ...

随机推荐

  1. 自动化测试_移动端测试(一) ----- Appium环境搭建

    一. 安装node.js 因为Appium是使用nodejs实现的,所以node是解释器,首先需要确认安装好 官网下载node.js:https://nodejs.org/en/download/ 安 ...

  2. Nacos一致性算法

    1. CAP原则 又称CAP定理,指的是在一个分布式系统中,一致性(Consistency).可用性(Availability).分区容错性(Partition tolerance).CAP 原则指的 ...

  3. Web基础_0x00_Web工作方式

    web工作方式 对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当输入URL的时候,首先浏览器会去请求DNS服务器,通过NDS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服 ...

  4. day02-多任务(进程和协程)

    一.多任务的概念       简单地说,就是操作系统可以同时运行多个任务.打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行.还有很多任务 ...

  5. 企业级工作流解决方案(八)--微服务Tcp消息传输模型之服务端处理

    服务端启动 服务端启动主要做几件事情,1. 从配置文件读取服务配置(主要是服务监听端口和编解码配置),2. 注册编解码器工厂,3. 启动dotnetty监听端口,4. 读取配置文件,解析全局消息处理模 ...

  6. 在Guitar Pro中如何模拟电子管音响

    在这篇文章中,我们将使用Guitar Pro 7中的功能和工具,完成构建一个真实的电子管吉他音箱调音过程. 虽然Guitar Pro是用于创建吉他乐谱的工具,但在新版本中(主要是6和7)它也有一些模拟 ...

  7. C Looooops POJ - 2115

    数论好题.. 香! 首先我们看到这一题, 题意是 \[a + c * x \equiv b (mod \ \ 2 ^ k) \] 对此式移一下项, 得 \[c * x \equiv b - a (mo ...

  8. 【线程池】core与非core

    core和非core的区别: 当线程数小于core size时我们取task是这么取得: 小于时用poll并设置超时时间,否则用take阻塞等待 第二条件就出去了 没有拿到task的worker线程会 ...

  9. 【mq读书笔记】Index索引文件

    1.IndexHeader头部,40字节,记录IndexFile的统计信息: begainTimestamp:该索引文件中包含消息的最小存储时间 endTimestamp:该索引文件中包含消息的最大存 ...

  10. @RequestParam,@RequestBody,@PathVariable注解还分不清吗?

    前言 在使用 SpringMVC 开发时,经常遇到前端传递的各种参数,比如 form 表单,JSON 数据,String[] 数组,再或者是最常见的 String 字符串等等,总之大部分场景都是在标题 ...