练习10.26:解释三种插入迭代器的不同之处。
答:back_inserter创建一个使用push_back的迭代器。
front_inserter创建一个push_front的迭代器。
Inserter创建一个使用insert的迭代器。此函数接收第二个参数,这个参数必须是一个指向给定容器的迭代器。元素将被插入到给定迭代器所表示的元素之前。
练习10.27:除了unique(参见10.2.3节,第343页)之外,标准库还定义了名为unique_copy的函数,它接收三个迭代器,表示拷贝不重复元素的目的位置。编写一个程序,使用unique_copy将一个vector中不重复的元素拷贝到一个初始为空的list中。
答:见练习10.27.cpp
练习10.28:一个vector中保存1到9,将其拷贝到三个其他容器中。分别使用inster、back_inserter和front_inserter将元素添加到三个容器中。对每种inserter,估计序列是怎样的,运行程序验证你的估计是否正确。
答:假如原有容器中是vector<int> vec = {10,11,12}
使用inserter 1 2 3….. 9 10 11 12
back_inserter 10 11 12 1 2….9
front_inserter 9 8 7 …1 10 11 12
练习10.28.cpp
练习10.27
/*
*练习10.27
*2015/9/6
*问题描述:练习10.27:除了unique(参见10.2.3节,第343页)之外,标准库还定义了名为unique_copy的函数,它接收三个迭代器,表示拷贝不重复元素的目的位置。编写一个程序,使用unique_copy将一个vector中不重复的元素拷贝到一个初始为空的list中。
*说明:unique_copy的使用
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vec = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,6,7};
vector<int> vec2;
for(int i = 0 ; i != vec.size(); ++i)
cout << vec[i] << " ";
cout << endl;
unique_copy(vec.cbegin(), vec.cend(), back_inserter(vec2));
for(auto it = vec2.begin(); it != vec2.end(); ++it)
cout << *it << " ";
cout << endl;
return 0;
}
练习10.28
/*
*练习10.27
*2015/9/6
*问题描述:练习10.28:一个vector中保存1到9,将其拷贝到三个其他容器中。分别使用inster、back_inserter和front_inserter将元素添加到三个容器中。对每种inserter,估计序列是怎样的,运行程序验证你的估计是否正确。
*说明:unique_copy的使用
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*/
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vec;
list<int> vec2 = {10,11,12},vec3 = {10,11,12},vec4 = {10,11,12};
for(int i = 1; i <= 9; ++i)
vec.push_back(i);
copy(vec.cbegin(), vec.cend(), front_inserter(vec2));
for(auto it = vec2.begin(); it != vec2.end(); ++it)
cout << *it << " ";
cout << endl;
copy(vec.cbegin(), vec.cend(), back_inserter(vec3));
for(auto it = vec3.begin(); it != vec3.end(); ++it)
cout << *it << " ";
cout << endl;
copy(vec.cbegin(), vec.cend(), inserter(vec4,vec4.begin()));
for(auto it = vec4.begin(); it != vec4.end(); ++it)
cout << *it << " ";
cout << endl;
return 0;
}