C++Primer第五版 10.4.1节练习

本文介绍了C++标准库中三种不同插入迭代器的使用方法及其区别,并通过具体示例展示了如何利用这些迭代器来处理容器元素,包括使用unique_copy去除重复元素及不同插入方式的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值