前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++标准库中copy算法的使用

C++标准库中copy算法的使用

作者头像
charlee44
发布2020-03-19 14:44:13
2.1K0
发布2020-03-19 14:44:13
举报
文章被收录于专栏:代码编写世界代码编写世界

目录

std::copy是C++标准库中的算法接口,主要用于两个容器间的复制,据说其效率要优于自己用for循环逐个复制。之前一直非常混淆其中的用法,这里总结了几个例子如下:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

int main()
{
    //vector复制到vector
    {       
        vector<int> src = { 0, 1, 2, 3, 4 };
        vector<int> dst(8, -1);
        std::copy(src.begin(), src.end(), dst.begin());
        for (int i = 0; i < dst.size(); i++)
        {
            cout << dst[i] << '\t';
        }
        cout << endl;
    }

    //vector插入到vector末尾
    {
        vector<int> src = { 0, 1, 2, 3, 4 };
        vector<int> dst = { -10, -9 };
        std::copy(src.begin(), src.end(), std::back_inserter(dst));
        for (int i = 0; i < dst.size(); i++)
        {
            cout << dst[i] << '\t';
        }
        cout << endl;
    }

    //set插入到vector
    {
        set<int> src = { 4, 3, 2, 1, 0 };
        vector<int> dst;
        std::copy(src.begin(), src.end(), std::back_inserter(dst));
        for (int i = 0; i < dst.size(); i++)
        {
            cout << dst[i] << '\t';
        }
        cout << endl;
    }

    //数组插入到vector
    {
        int src[5] = { 0, 1, 2, 3, 4 };
        vector<int> dst;
        std::copy(src, src+5, std::back_inserter(dst));
        for (int i = 0; i < dst.size(); i++)
        {
            cout << dst[i] << '\t';
        }
        cout << endl;
    }

    //vector插入到数组
    {
        vector<int> src = { 0, 1, 2, 3, 4 };
        int dst[8] = { -1 };
        std::copy(src.begin(), src.end(), dst);
        for (int i = 0; i < 8; i++)
        {
            cout << dst[i] << '\t';
        }
        cout << endl;
    }

    //数组插入到数组
    {
        int src[5] = { 0, 1, 2, 3, 4 };
        int dst[8] = { -1 };
        std::copy(src, src + 5, dst);
        for (int i = 0; i < 8; i++)
        {
            cout << dst[i] << '\t';
        }
        cout << endl;
    }    
}

这个例子虽然繁复,但是确实表达了STL算法(algorithms)接口的原则:STL算法不负责空间申请操作,只负责相应行为,接口中容器的大小应该预先申请好。但是,这里有的例子用到了std::back_inserter,也就是插入迭代器,会将元素自动插入到支持push_back的容器后面,看起来似乎破坏了这个原则。这也是我之前为什么搞混淆的原因。看来这个问题有机会还需进一步深究。

最后的运行结果如下:

std::copy
std::copy
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档