当前位置: 首页 > article >正文

介绍C++vector的insert函数用法

在 C++ 中,std::vector 是一个动态数组,提供了灵活的内存管理和丰富的成员函数。insert 函数是 std::vector 提供的一个非常有用的成员函数,用于在指定位置插入元素或另一个范围的元素。

std::vector::insert 的用法

1. 插入单个元素
iterator insert(const_iterator pos, const T& value);
  • pos:插入位置的迭代器(指向要插入位置的前一个元素)。

  • value:要插入的元素。

2. 插入多个相同的元素
void insert(const_iterator pos, size_type count, const T& value);
  • pos:插入位置的迭代器。

  • count:要插入的元素数量。

  • value:要插入的元素。

3. 插入一个范围的元素
template <class InputIterator>
void insert(const_iterator pos, InputIterator first, InputIterator last);
  • pos:插入位置的迭代器。

  • first:范围的起始迭代器。

  • last:范围的结束迭代器。

4. 插入初始化列表中的元素(C++11 及以上)
void insert(const_iterator pos, initializer_list<T> ilist);
  • pos:插入位置的迭代器。

  • ilist:初始化列表。

示例代码

示例 1:插入单个元素
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    vec.insert(vec.begin() + 2, 99); // 在索引2的位置插入99

    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 99 3 4 5

示例 2:插入多个相同的元素
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    vec.insert(vec.begin() + 2, 3, 99); // 在索引2的位置插入3个99

    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 99 99 99 3 4 5

示例 3:插入一个范围的元素
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec1 = {1, 2, 3, 4, 5};
    vector<int> vec2 = {99, 100, 101};

    vec1.insert(vec1.begin() + 2, vec2.begin(), vec2.end()); // 在索引2的位置插入vec2的所有元素

    for (int num : vec1) {
        cout << num << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 99 100 101 3 4 5

示例 4:插入初始化列表中的元素
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    vec.insert(vec.begin() + 2, {99, 100, 101}); // 在索引2的位置插入初始化列表中的元素

    for (int num : vec) {
        cout << num << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 99 100 101 3 4 5

注意事项

  1. 迭代器失效

    • 插入操作会使插入点之后的所有迭代器失效。如果需要在插入后继续使用迭代器,建议重新获取。

    • 例如:

      auto it = vec.begin() + 2;
      vec.insert(it, 99);
      it = vec.begin() + 2; // 重新获取迭代器
  2. 性能

插入操作的时间复杂度为 O(n),其中 n 是插入点之后的元素数量。这是因为插入操作可能需要移动插入点之后的所有元素。

内存分配

如果插入操作导致 vector 的容量不足,vector 会自动重新分配内存,这可能会导致所有迭代器失效。

总结

std::vector::insert 是一个非常灵活的函数,可以用于在指定位置插入单个元素、多个相同的元素、一个范围的元素或初始化列表中的元素。通过合理使用 insert 函数,可以方便地操作 vector 的内容。


http://www.kler.cn/a/583727.html

相关文章:

  • Mybatis3 调用存储过程
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三)
  • 二维数组基础
  • stm32中分析UART中IDLE,RXNE,TC,TXE这些标志位的作用
  • 基于Python的selenium入门超详细教程(第1章)--WebDriver API篇
  • Android Framwork 之深入理解 IPC Binder机制
  • Leetcode 刷题笔记1 动态规划part11
  • 【操作系统】Linux基本命令2
  • 常见 JVM 工具介绍
  • 19873连通块中点的数量
  • 回归预测 | MATLAB实现SSA-LSTM和LSTM多输入单输出
  • Git 的基本概念和使用方式(附有思维导图)
  • 一维下料之 *贪心算法* —— CAD c#二次开发
  • 【软考-架构】3.3、模式分解-事务并发-封锁协议
  • C# WPF 基础知识学习(一)
  • 贪心算法(5)(java)k次取反后最大化的数组和
  • 什么是AI?AI能对我们生活产生哪些影响?
  • LeetCode 112. 路径总和 II java题解
  • 如何用Docker容器化Java应用?Spring Boot实战指南
  • Spring Boot 约定大于配置:实现自定义配置