插入器 构造一个插入迭代器,该迭代器将新元素从x指向的位置开始插入x的连续位置。它在头文件中定义 .
null
插入迭代器是一种特殊类型的 输出迭代器 设计用于允许通常覆盖元素(例如复制)的算法在容器中的特定位置自动插入新元素。 语法:
std::inserter(Container& x, typename Container::iterator it); x: Container in which new elements will be inserted. it: Iterator pointing to the insertion point. Returns: An insert_iterator that inserts elements into x at the position indicated by it.
// C++ program to demonstrate std::inserter #include <iostream> #include <iterator> #include <deque> #include <algorithm> using namespace std; int main() { // Declaring first container deque< int > v1 = { 1, 2, 3 }; // Declaring second container for // copying values deque< int > v2 = { 4, 5, 6 }; deque< int >::iterator i1; i1 = v2.begin() + 1; // i1 points to next element of 4 in v2 // Using std::inserter inside std::copy std::copy(v1.begin(), v1.end(), std::inserter(v2, i1)); // v2 now contains 4 1 2 3 5 6 // 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 1 2 3 5 6
它有什么帮助?
- 在任意位置插入值: 现在,想象一下,如果我们必须将值复制到一个容器中,比如向量,首先,我们必须移动元素,然后进行复制,但是在std::insert()的帮助下,我们可以轻松地在任何位置插入。
// C++ program to demonstrate std::inserter
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using
namespace
std;
int
main()
{
// Declaring first container
vector<
int
> v1 = { 1, 2, 3, 7, 8, 9 };
// Declaring second container
vector<
int
> v2 = { 4, 5, 6 };
vector<
int
>::iterator i1;
i1 = v2.begin() + 2;
// i1 points to next element of 5 in v2
// Using std::inserter inside std::copy
std::copy(v1.begin(), v1.end(), std::inserter(v2, i1));
// v2 now contains 4 5 1 2 3 7 8 9 6
// Displaying v1 and v2
cout <<
"v1 = "
;
int
i;
for
(i = 0; i < 6; ++i) {
cout << v1[i] <<
" "
;
}
cout <<
"v2 = "
;
for
(i = 0; i < 9; ++i) {
cout << v2[i] <<
" "
;
}
return
0;
}
输出:
v1 = 1 2 3 7 8 9 v2 = 4 5 1 2 3 7 8 9 6
说明: 在这里,我们开始将v1复制到v2中,但不是从一开始,而是在v2的第二个位置之后,即5之后,所以v1的所有元素都是在5之后、6之前插入的。通过这种方式,我们可以很容易地在我们想要的地方插入值。
要记住的要点:
- std::inserter的一个缺陷是它可以 仅用于那些将insert作为其方法之一的容器 比如vector、list和deque等等。
- insert()vs std::inserter(): 现在,您可能认为insert()和std::inserter()是相似的,但它们不是。当必须在算法中传递迭代器时,应该像上面的情况一样使用inserter(),而对于通常在容器中插入值,可以使用insert()。
- 代替使用std::inserter,我们可以 创建一个插入迭代器 然后使用它,因为std::inserter最终只返回一个insert_迭代器。
// C++ program to demonstrate insert_iterator
#include <iostream>
#include <iterator>
#include <deque>
#include <algorithm>
using
namespace
std;
int
main()
{
// Declaring first container
deque<
int
> v1 = { 1, 2, 3 };
// Declaring second container for
// copying values
deque<
int
> v2 = { 4, 5, 6 };
deque<
int
>::iterator ii;
ii = v2.begin() + 1;
// ii points after 4 in v2
// Declaring a insert_iterator
std::insert_iterator<std::deque<
int
> > i1(v2, ii);
// Using the iterator in the copy()
std::copy(v1.begin(), v1.end(), i1);
// v2 now contains 4 1 2 3 5 6
// 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 1 2 3 5 6
本文由 辛格先生 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END