std::back_inserter構造一個back-insert迭代器,該迭代器在要應用它的容器的末尾插入新元素。它在頭文件中定義。
back-insert迭代器是一種特殊的輸出迭代器,其設計目的是使通常會覆蓋元素(例如副本)的算法能夠在容器的末尾自動插入新元素。
用法:
std::back_inserter (Container& x); x:Container in which new elements will be inserted at the end. 返回: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 << "\nv2 = ";
for (i = 0; i < 6; ++i) {
cout << v2[i] << " ";
}
return 0;
}
輸出:
v1 = 1 2 3 v2 = 4 5 6 1 2 3
How is it helpful ?
- 無需事先知道容器的大小:這種函數可能非常有用的一種情況是,當我們不知道容器的大小時,即要向其中插入多少個元素,因此一種方法是使容器非常大,但是在這種情況下,最有效的方法是使用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 << "\nv2 = "; 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的陷阱之一是它隻能與那些具有push_back作為其方法之一的容器一起使用,例如在矢量,列表和雙端隊列的情況下。
- push_back()和back_inserter():現在,您可能會認為push_back()和back_inserter是相似的,但實際上並非如此。當您必須在算法中傳遞迭代器時,則應像上述情況一樣使用back_inserter,而通常在容器末尾插入值時,可以使用push_back()。
- 代替使用std::back_inserter,我們可以創建back_insert_iterator,然後最終使用它,std::back_inserter僅返回back_insert_iterator。
// 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 << "\nv2 = "; 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 in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。