0

0

C++ vector insert用法详解_C++ vector在指定位置插入元素教程

尼克

尼克

发布时间:2025-11-25 18:24:08

|

971人浏览过

|

来源于php中文网

原创

std::vector::insert 可在指定位置插入元素,支持单个值、多个相同值、区间及初始化列表的插入,返回指向新元素的迭代器;但非尾部插入需移动后续元素,时间复杂度为 O(n),且可能使迭代器失效,影响性能。

c++ vector insert用法详解_c++ vector在指定位置插入元素教程

在C++中,std::vector 是一个动态数组容器,支持在运行时动态添加或删除元素。除了在尾部高效插入的 push_back() 方法外,insert() 函数提供了更灵活的功能——允许在指定位置插入一个或多个元素。本文将详细讲解 vector 的 insert 用法,包括语法、参数、返回值以及常见使用场景。

insert 基本语法与参数说明

insert() 是 vector 类的成员函数,有多种重载形式。最常用的几种如下:

  • iterator insert(iterator pos, const T& value);
    在指定位置 pos 插入一个元素 value,返回指向新插入元素的迭代器。
  • iterator insert(iterator pos, size_type count, const T& value);
    在位置 pos 插入 count 个相同的元素,返回第一个插入元素的迭代器。
  • template
    iterator insert(iterator pos, InputIt first, InputIt last);

    将区间 [first, last) 中的元素插入到 pos 位置。
  • iterator insert(iterator pos, initializer_list ilist);
    插入初始化列表中的元素。

其中,pos 是目标插入位置的迭代器,插入后原有元素会自动后移。

在指定位置插入单个元素

这是最常见的用法。例如,在 vector 的第2个位置(索引为1)插入一个数字:

立即学习C++免费学习笔记(深入)”;

#include 
#include 
using namespace std;

int main() {
    vector vec = {10, 20, 30};
    
    // 在索引1处插入15
    vec.insert(vec.begin() + 1, 15);
    
    for (int x : vec) {
        cout << x << " ";
    }
    // 输出:10 15 20 30
    return 0;
}

注意:vec.begin() + 1 指向第二个元素的位置,新元素将插入到这里,原元素依次后移。

插入多个相同元素

如果需要连续插入多个相同值,可以使用带计数的版本:

vec.insert(vec.begin() + 2, 3, 99); // 在索引2处插入3个99

假设原 vector 为 {10, 20, 30},执行后变为 {10, 20, 99, 99, 99, 30}

讯飞星火
讯飞星火

科大讯飞推出的多功能AI智能助手

下载

插入另一个容器的部分或全部内容

你可以将数组、另一个 vector 或其他序列容器的一段插入到当前 vector 中:

vector vec = {1, 2, 3};
vector to_insert = {7, 8, 9};

// 将 to_insert 全部插入到 vec 开头
vec.insert(vec.begin(), to_insert.begin(), to_insert.end());

// 结果:7 8 9 1 2 3

也可以只插入部分,比如:

vec.insert(vec.end(), to_insert.begin(), to_insert.begin() + 2); // 插入前两个

使用初始化列表插入元素

C++11 起支持直接传入初始化列表:

vec.insert(vec.begin() + 1, {100, 200, 300});

这将在索引1处一次性插入三个值,非常方便用于快速添加测试数据或常量序列。

insert 的性能与注意事项

虽然 insert 功能强大,但需注意以下几点:

  • 在非尾部插入元素时,vector 需要将插入点之后的所有元素向后移动,时间复杂度为 O(n),效率低于 push_back()
  • 插入可能导致容器容量不足,从而触发重新分配内存,使所有迭代器、指针和引用失效。
  • 尽量避免在大 vector 的头部或中间频繁插入,可考虑使用 std::list 或先收集数据再批量构建。
  • 插入后应避免使用插入前保存的迭代器,建议重新获取。

基本上就这些。掌握 vector 的 insert 方法,能让你更灵活地操作动态数组,合理使用可提升代码表达力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1503

2023.10.24

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

532

2023.09.20

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

469

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

17

2025.12.06

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

29

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

17

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

15

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号