std::inserter构造一个插入迭代器,该插入迭代器在从x指向的位置开始的连续位置将新元素插入x中。它在头文件中定义。
插入迭代器是输出迭代器的一种特殊类型,设计用于允许通常会覆盖元素(例如副本)的算法代替自动在容器中的特定位置插入新元素。句法:
std::inserter(Container& x, typename Container::iterator it); x:Container in which new elements will be inserted. it:Iterator pointing to the insertion point. 返回: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 << "\nv2 = ";
for (i = 0; i < 6; ++i) {
cout << v2[i] << " ";
}
return 0;
}
输出:
v1 = 1 2 3 v2 = 4 1 2 3 5 6
How is it helpful ?
- 在任何地方插入值:现在,试想一下,如果我们必须将值复制到向量之类的容器中,首先必须先移动元素然后进行复制,但是借助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 << "\nv2 = "; 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()和std::inserter():现在,您可能会认为insert()和std::inserter(是相似的,但事实并非如此。当必须在算法中传递迭代器时,则应像上述情况一样使用inserter(),而通常在容器中插入值时,可以使用insert()。
- 代替使用std::inserter,我们可以创建一个insert_iterator,然后使用它,因为最终,std::inserter仅返回insert_iterator。
// 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 << "\nv2 = "; for (i = 0; i < 6; ++i) { cout << v2[i] << " "; } return 0; }
输出:
v1 = 1 2 3 v2 = 4 1 2 3 5 6
相关用法
注:本文由纯净天空筛选整理自 std::inserter in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。