标准:背部插入器 构造一个反向插入迭代器,在应用它的容器的末尾插入新元素。它在头文件中定义 .
null
反向插入迭代器是一种特殊类型的 输出迭代器 设计用于允许通常覆盖元素(如复制)的算法在容器末尾自动插入新元素。
语法:
std::back_inserter (Container& x); x: Container in which new elements will be inserted at the end. Returns: A back_insert_iterator that inserts elements at the end of container x.
// C++ program to demonstrate std::back_inserter #include <iostream> #include <iterator> #include <vector> #include <algorithm> using namespace std; int main() { // Declaring first container vector< int > v1 = { 1, 2, 3 }; // Declaring second container for // copying values vector< int > v2 = { 4, 5, 6 }; // Using std::back_inserter inside std::copy std::copy(v1.begin(), v1.end(), std::back_inserter(v2)); // v2 now contains 4 5 6 1 2 3 // Displaying v1 and v2 cout << "v1 = " ; int i; for (i = 0; i < 3; ++i) { cout << v1[i] << " " ; } cout << "v2 = " ; for (i = 0; i < 6; ++i) { cout << v2[i] << " " ; } return 0; } |
输出:
v1 = 1 2 3 v2 = 4 5 6 1 2 3
它有什么帮助?
- 无需事先了解容器的尺寸: 这样一个函数非常有用的一种情况是,我们不知道容器的大小,也就是说,将插入多少个元素,所以一种方法是使容器的大小非常大,但是 最有效的方法是使用std::back_inserter() 在这种情况下,无需声明容器的大小。
// C++ program to demonstrate std::back_inserter
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using
namespace
std;
int
main()
{
// Declaring first container
vector<
int
> v1 = { 1, 2, 3 };
// Declaring second container without specifying
// its size
vector<
int
> v2;
// Using std::back_inserter inside std::copy
std::copy(v1.begin(), v1.end(), std::back_inserter(v2));
// v2 now contains 1 2 3
// Displaying v1 and v2
cout <<
"v1 = "
;
int
i;
for
(i = 0; i < 3; ++i) {
cout << v1[i] <<
" "
;
}
cout <<
"v2 = "
;
for
(i = 0; i < 3; ++i) {
cout << v2[i] <<
" "
;
}
return
0;
}
输出:
v1 = 1 2 3 v2 = 1 2 3
说明: 在这里,我们必须将v1复制到v2中,但假设我们处于某个场景中,我们不知道有多少元素将被复制到v2中,因此我们不会指定其大小,然后使用std::back_inserter()将其复制到v2中。
为什么不呢。begin()代替back_inserter()?? 你们中的许多人会想,为什么我们没有使用v2。begin()代替std::back_inserter(v2),那么您需要重新考虑,因为我们没有声明v2的大小,因此,其中没有元素,因此将没有开始,因此,v2。begin()将在此处抛出一个错误。
要记住的要点:
- std::back_inserter的一个缺陷是它可以 仅用于那些将“推回”作为其方法之一的容器 比如vector、list和deque。
- 向后推()vs向后推插入器(): 现在,你可能会认为push_back()和back_inserter是相似的,但事实并非如此。当必须在算法中传递迭代器时,应该像上述情况一样使用back_inserter,而对于通常在容器末尾插入值,可以使用push_back()。
- 代替使用std::back_inserter,我们可以 创建一个back_insert_迭代器 然后将其用作finally,std::back_inserter只返回back_insert_迭代器。
// C++ program to demonstrate back_insert_iterator
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using
namespace
std;
int
main()
{
// Declaring first container
vector<
int
> v1 = { 1, 2, 3 };
// Declaring second container for
// copying values
vector<
int
> v2 = { 4, 5, 6 };
// Declaring a back_insert_iterator
std::back_insert_iterator<std::vector<
int
> > back_i1(v2);
// Using the iterator in the copy()
std::copy(v1.begin(), v1.end(), back_i1);
// v2 now contains 4 5 6 1 2 3
// Displaying v1 and v2
cout <<
"v1 = "
;
int
i;
for
(i = 0; i < 3; ++i) {
cout << v1[i] <<
" "
;
}
cout <<
"v2 = "
;
for
(i = 0; i < 6; ++i) {
cout << v2[i] <<
" "
;
}
return
0;
}
输出:
v1 = 1 2 3 v2 = 4 5 6 1 2 3
本文由 辛格先生 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END