C++ Back_Inserter介绍

601 阅读3分钟

C++ Back_Inserter

C++ Back_Inserter简介

C++中的back_inserter方法是用来构造一个迭代器的,它负责将新的元素插入到 "x "或容器的末端,这个方法是在程序的头文件中定义的。在C++中,这是一种特殊类型的输出迭代器,旨在让算法覆盖任何元素,而不是强制插入新元素。

语法

现在我们已经了解了这个C++的back_inserter方法是什么,让我们来学习语法并理解它。back_inserter的语法如下:

std::back_inserter ( Container & x );

当我们要在容器的末端插入新的元素时,我们在参数中传递容器,也就是我们在这里看到的语法中的容器。所以这个方法返回的是在容器末尾插入的元素的列表。接着,我们现在来看看这个方法是如何解释工作的。

Back_Inserter方法在C++中是如何工作的?

了解back_inserter方法的工作原理是很重要的,它的工作原理是创建一个back-insert迭代器,负责向列表添加或插入新的元素。这个回插迭代器是一个特殊的类型,它允许算法覆盖这些元素。接下来,我们将了解实例并演示back_inserter的工作。

C++ Back_Inserter的例子

下面提到了不同的例子。

例子#1

我们的第一个例子是back_inserter的简单工作;在这里,我们将元素添加到列表的最后。代码如下:

代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::fill_n(std::back_inserter(v), 3, -1);
std::cout << "\n The output for the code is: ";
for (int n : v)
std::cout  <<  n  << ' ';
}

代码解释

简单地从导入重要的系统文件开始,然后进入我们的主代码。然后我们有我们的std,这是我们程序的命名空间,接着是定义范围;我们有一个整数数据类型的向量,值为1到10。然后是back_inserter语句,容器为n,就像我们学习的语法一样,后面是x参数。

然后,我们有第一个输出打印语句,它简单地打印了一个字符串语句,back_inserter的结果将跟在它后面。最后,我们有for the语句,在这里,我们传递我们的向量,容纳数字为n,然后下一行如果我们的最终输出语句以负数的形式打印向量中的数字。请参考下面的截图,以正确理解输出。

输出

C++ back_inserter output 1

正如预期的那样,输出以打印语句开始,然后是数字列表。最后的数字包括back_inserter的结果,也就是负数的数字,现在,继续下一个例子。

例子#2

我们的第二个例子涉及到为容器分配大小。我们有一个有3个值的容器,然后我们创建另一个没有任何特定大小的容器。让我们看看它是如何工作的。代码如下。

代码

#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main()  {
vector<int> v1 = { 7, 8, 9 };
vector<int> v2;
std::copy(v1.begin(), v1.end(), std::back_inserter(v2));
cout << "\n Elements of Container 1 are : ";
int i;
for (i = 0; i < 3; ++i) {
cout << v1[i] << " ";
}
cout << "\n Elements of Container 2 are : ";
for (i = 0; i < 5; ++i) {
cout << v2[i] << " ";
}
return 0;
}

代码解释

首先是所有需要的系统文件,接着是初始化main。然后我们有了第一个数据类型为整数的向量,它可以容纳3个值,第二个向量也是同样的类型,但没有具体的大小和值。然后开始我们的复制操作,我们要复制向量1的开始和结束部分,并为向量2实现back_inserter。

现在我们开始打印我们的向量所持有的值的列表。首先是一个cout语句,然后是for a语句,在这里我们计算并打印向量的每个元素。对于我们的第一个向量,这个for语句将只打印3个值,不会超过这个数。转到我们的第二个向量,在for内,我们希望它能打印5个值。在这里,我们将有2个新的数值,它们将是零,但被添加到向量的最后部分。请参考下面的截图,以正确理解输出的内容。

输出

C++ back_inserter output 2

正如预期的那样,我们有两个打印语句,其中有两个向量的值。

例子#3

进入下一个例子,我们将看到我们的第三个例子。让我们看看它是如何工作的。代码如下。

代码

#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
int main () {
std::vector<int> dab,bar;
for (int i=1; i<=5; i++){
dab.push_back(i); bar.push_back(i*5); }
std::copy (bar.begin(),bar.end(),back_inserter(dab));
std::cout << "\n Our Container contains: ";
for ( std::vector<int>::iterator it = dab.begin(); it!= dab.end(); ++it )
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}

代码解释

与我们前面的例子类似,我们有系统文件,然后声明了两个整数类型的向量。然后我们有For the语句,将新的值添加到列表中,下一条语句是push_back,将我们的值从列表中多出来。这些事情发生在我们的第一个向量中,随后我们将所有的值复制到第二个向量中。然后是我们的打印语句和for语句,以正确地打印这些值。请看下面的截图。

输出

output 3

优点

其中一个主要的优点是当我们不知道容器的大小时。所以,当我们要插入新的元素,但不知道尺寸和可以插入多少个新元素时,我们的操作就不能成功。但是使用back_inserter,不需要声明容器的任何大小,这意味着容器可以在以后扩展到任何限制。

除了这些优点之外,我们还需要明白,back_inserter只能用于已经有push_back方法的容器。

总结

back_inserter在C++编程语言中提供了一种方法,它构造了一个迭代器,并通过末端向列表中插入新的元素的操作。使用back_inserter的好处是我们不需要有一个合适的列表编号。此外,我们还了解了与实例和代码有关的实现。