C++ `insert()` 函数详解:字符串、容器与迭代器操作指南
引言
在本教程中,我们将深入学习C++中向量的insert()
函数。我们将探讨其工作原理,并通过丰富的示例讨论如何以不同方式使用它来完成元素插入操作。
C++中的vector::insert()
函数
vector::insert()
函数是C++标准模板库(STL)中vector
容器的核心成员函数,主要用于在向量容器的指定位置插入一个或多个元素。通常情况下,该函数会返回一个指向第一个被插入元素的迭代器。
使用向量的insert()
函数
insert()
方法提供了多种灵活的方式,允许您向给定的向量中插入单个或多个元素。我们可以在向量的任意指定位置插入单个值,也可以一次性插入多个相同的值,甚至可以将另一个向量中的一系列值批量插入到当前向量中。
那么,接下来让我们详细了解如何轻松实现这些插入操作。
1. 将单个值插入到向量中
我们可以直接将指向所需插入位置的迭代器和要插入的值传递给insert()
函数,从而修改一个向量。
请仔细看下面的例子,在这里我们尝试在向量的开头插入一个值为10的元素。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec {1,2,3,4,5};
cout<<"初始向量: ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
vec.insert(vec.begin(),10); // 在向量开头插入10
cout<<"\n\n修改后的向量为: ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
return 0;
}
输出:
初始向量: 1 2 3 4 5
修改后的向量为: 10 1 2 3 4 5
在这里:
- 首先,我们初始化了一个名为
vec
的向量,并打印其初始内容。 - 接着,我们调用了向量
vec
的insert()
函数,传入参数vec.begin()
和10
(新值)。请注意,vec.begin()
返回一个指向向量起始位置的迭代器。 - 插入操作完成后,我们使用一个简单的
for
循环打印新的向量,以查看最终结果。
2. 多次插入相同的值
我们还可以使用insert()
函数一次性向向量中插入多个相同的值。这可以通过传递一个迭代器(指向我们希望插入的起始位置)、重复的次数以及要插入的值来实现。
下面的例子展示了正确的使用方法。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec {10,20,30,40};
cout<<"初始向量: ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
vec.insert(vec.end(),3,100);//向向量中插入3个100
cout<<"\n\n修改后的向量为: ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
return 0;
}
产出
初始向量: 10 20 30 40
修改后的向量为: 10 20 30 40 100 100 100
这里:
- 我们初始化了向量
vec
并打印其内容。 - 然后,我们向
insert()
函数传递了一个指向向量末尾的迭代器(由vec.end()
返回)、重复次数3
以及值100
。 - 正如我们从输出中观察到的,值
100
被插入到向量vec
的末尾三次。
3. 插入另一个向量
在C++中将一个向量的元素插入到另一个向量
除了插入单个元素或重复元素,我们还可以将一个向量(源向量)的全部或部分元素插入到另一个向量(目标向量)中。这需要使用insert()
函数的特定重载形式。
具体来说,我们需要提供以下参数:
- 一个迭代器,指向目标向量中希望插入元素的位置。
- 一个迭代器,指向源向量中要插入的起始位置。
- 一个迭代器,指向源向量中要插入的结束位置(不包含此位置的元素)。
让我们通过一个简单的例子来理解其工作原理:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec {2,4,6,8};
vector<int> vec2 {1,3,5,7};
cout << "初始时,第一个向量vec: ";
for(auto i = vec.begin(); i < vec.end(); i++)
{
cout << " " << *i;
}
cout << "\n初始时,第二个向量vec2: ";
for(auto i = vec2.begin(); i < vec2.end(); i++)
{
cout << " " << *i;
}
// 将vec2的元素插入到vec向量的开头位置
vec.insert(vec.begin(), vec2.begin(), vec2.end());
cout << "\n\n修改后的向量vec: ";
for(auto i = vec.begin(); i < vec.end(); i++)
{
cout << " " << *i;
}
return 0;
}
输出结果:
初始时,第一个向量vec: 2 4 6 8
初始时,第二个向量vec2: 1 3 5 7
修改后的向量vec: 1 3 5 7 2 4 6 8
在这个例子中,vec
和vec2
是两个整数向量。我们希望将vec2
的所有元素插入到vec
中。通过调用vec.insert(vec.begin(), vec2.begin(), vec2.end())
,我们指示insert()
函数将从vec2.begin()
(包含)到vec2.end()
(不包含)范围内的所有元素,插入到vec
的起始位置(由vec.begin()
指定)。
最终,vec
被修改,vec2
的元素被成功插入到vec
的开头,形成了新的序列。
至此,本教程已详细阐述了在 C++ 中使用 STL 向量的 insert()
函数的工作原理和具体用法。为了加深理解,我们强烈建议您亲自动手尝试上述代码示例。如果您在实践过程中遇到任何疑问,请随时在下方评论区留言,我们将竭诚为您解答。
参考文献
- 在向量的特定位置替换元素 – Stack Overflow 问题
- 如何在向量的开头插入元素? – Stack Overflow 问题
- C++ 中的向量 – JournalDev 教程