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的向量,并打印其初始内容。
  • 接着,我们调用了向量vecinsert()函数,传入参数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()函数的特定重载形式。

具体来说,我们需要提供以下参数:

  1. 一个迭代器,指向目标向量中希望插入元素的位置。
  2. 一个迭代器,指向源向量中要插入的起始位置。
  3. 一个迭代器,指向源向量中要插入的结束位置(不包含此位置的元素)。

让我们通过一个简单的例子来理解其工作原理:

#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

在这个例子中,vecvec2是两个整数向量。我们希望将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 教程
bannerAds