说明
back_inserter
用于在末尾插入元素。
实现方法是构造一个迭代器,这个迭代器可以在容器末尾添加元素。
这个迭代器是以安插(insert)方式而非覆写(overwrite)方式运作的。
可以使用back_inserter
的容器是有push_back
成员函数的容器,比如vector, deque and list
等
函数签名:
template <class Container>
back_insert_iterator<Container> back_inserter (Container& x);
头文件
#include <iterator>
例子:在末尾添加一个元素
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1{ 1, 2, 3, 4, 5, 6 };
*(std::back_inserter(v1)) = 10;
std::cout << "v1: ";
for (int i : v1) {
std::cout << i << "\t";
}
std::cout << std::endl;
return 0;
}
结果:
v1: 1 2 3 4 5 6 10
例子:拷贝v2到v1的末尾
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1{ 1, 2, 3, 4, 5, 6};
std::vector<int> v2{ 10, 20, 30, 40, 50, 60};
std::copy(v2.begin(), v2.end(), std::back_inserter(v1));
std::cout << "v1: ";
for (int i : v1) {
std::cout << i << "\t";
}
std::cout << std::endl;
return 0;
}
结果:
v1: 1 2 3 4 5 6 10 20 30 40 50 60
与end()
的不同
首先end()
返回的迭代器是不支持解引用的,要想修改最后一个元素使用v.end()-1
,强行对end()
解引用会报异常。
然后*(v.end()-1) = 10;
是修改最后一个元素内容,而*(std::back_inserter(v2)) = 10;
是在末尾新增一个元素。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v1{ 1, 2, 3, 4, 5, 6};
std::vector<int> v2{ 1, 2, 3, 4, 5, 6 };
*(v1.end()-1) = 10;
*(std::back_inserter(v2)) = 10;
std::cout << "v1: ";
for (int i : v1) {
std::cout << i << "\t";
}
std::cout << std::endl << std::endl;
std::cout << "v2: ";
for (int i : v2) {
std::cout << i << "\t";
}
std::cout << std::endl << std::endl;
system("pause");
return 0;
}
结果:
v1: 1 2 3 4 5 10
v2: 1 2 3 4 5 6 10
网友评论