std::front_inserter構造一個front-insert迭代器,該迭代器在要應用它的容器的前麵插入新元素。它在頭文件中定義。
front-insert迭代器是一種特殊的輸出迭代器,其設計目的是使通常會覆蓋元素(例如,副本)的算法能夠在容器的開頭自動插入新元素。它與std::back_inserter完全相反。
用法:
std::front_inserter (Container& x); x:Container in which new elements will be inserted at the beginning. 返回:A front_insert_iterator that inserts elements at the beginning of container x.
// C++ program to demonstrate std::front_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 };
// Using std::front_inserter inside std::copy
std::copy(v1.begin(), v1.end(), std::front_inserter(v2));
// v2 now contains 3 2 1 4 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 = 3 2 1 4 5 6
How is it helpful ?
- 反轉容器:現在,由於std::front_inserter在容器的開頭插入了新元素,因此我們可以借助copy()來執行reverse_copy()的任務,這樣我們將創建另一個包含與當前容器相反的容器。
// C++ program to demonstrate std::front_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 storing the reverse deque<int> v2; // Using std::front_inserter inside std::copy std::copy(v1.begin(), v1.end(), std::front_inserter(v2)); // v2 now contains 3 2 1 // Displaying v1 and v2 cout << "v1 = "; int i; for (i = 0; i < 3; ++i) { cout << v1[i] << " "; } cout << "\nv2 = "; for (i = 0; i < 3; ++i) { cout << v2[i] << " "; } return 0; }
輸出:
v1 = 1 2 3 v2 = 3 2 1
說明:在這裏,我們開始將v1複製到v2,但是從頭開始,因此每次將新元素插入到開頭時,以此方式,最後插入的元素便成為新容器中的第一個元素,並且以此方式我們能夠反轉容器的內容。
要記住的要點:
- std::front_inserter的陷阱之一是它隻能與具有push_front作為其方法之一的那些容器一起使用,例如在使用list和deque的情況下,並且不能與向量一起使用。
- push_front()和front_inserter():現在,您可能會認為push_front()和front_inserter是相似的,但實際上並非如此。如果必須在算法中傳遞迭代器,則應像上述情況一樣使用front_inserter,而通常在容器的開頭插入值時,可以使用push_front()。
- 代替使用std::front_inserter,我們可以創建一個front_insert_iterator,然後使用它,因為最終,std::front_inserter僅返回front_insert_iterator。
// C++ program to demonstrate front_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 }; // Declaring a front_insert_iterator std::front_insert_iterator<std::deque<int> > front_i1(v2); // Using the iterator in the copy() std::copy(v1.begin(), v1.end(), front_i1); // v2 now contains 3 2 1 4 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 = 3 2 1 4 5 6
相關用法
注:本文由純淨天空篩選整理自 std::front_inserter in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。