把数组或vector中的数据分成几段

本文介绍了三种方法将一个包含21个元素的std::vector<float>分成5段,每段4个元素。方法一是使用memcpy进行内存复制,方法二是使用std::copy进行元素复制,方法三是通过指针直接复制。这些方法适用于需要对容器数据进行分块处理的场景。

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

工程中有时需要把数组或vector中的数据分成几段并分别保存。
直接看例子:

  1. 问题:需要把长度为21个元素的std::vector<float>points按一定格式分成5段(蓝色箭头所指列为每段的起始索引列,红色箭头所指列为每段的末尾索引)
    std::vector<float> points;
    for (int i = 0; i < 21; ++i)
    {
        points.push_back(i+0.5);
    }

` 在这里插入图片描述
解决方法:
方式一:

    std::vector<float> points;
    for (int i = 0; i < 21; ++i)
    {
        points.push_back(i+0.5);
    }
    vector<std::vector<float>>pp;
    int m =0;
    for (std::vector<float>::iterator iter=points.begin(); iter!=points.end(); m++)
    {
        if(m<5)
        {
            if(m==0)
            {
                iter = iter+1;
            }
            else
            {
                iter = iter+4;
            }
            std::vector<float> tmpvect(4);//初始化时要赋容器大小
            memcpy(&tmpvect[0], &iter[0], 4*sizeof(points[0]));
            pp.push_back(tmpvect);
        } 
        else
        {
            break;
        }
    }

方式二:

   std::vector<float> points;
    for (int i = 0; i < 21; ++i)
    {
        points.push_back(i+0.5);
    }
    vector<std::vector<float>>pp;
    int m =0;
    for (std::vector<float>::iterator iter=points.begin(); iter!=points.end(); m++)
    {
        if(m<5)
        {
            if(m==0)
            {
                iter = iter+1;
            }
            else
            {
                iter = iter+4;
            }
            std::vector<float> tmpvect(4);//初始化时要赋容器大小
            copy(iter,iter+4, tmpvect.begin());
            pp.push_back(tmpvect);
        } 
        else
        {
            break;
        }
    }

方式三:

    float points[21];
    for (int i = 0; i < 21; ++i)
    {
        points[i] = i+0.5;
    }
    vector<std::vector<float>>pp;
    for (int j = 0; j < 5; ++j)
    {
        std::vector<float>pvect(4);
        float *p = points + (4*j + 1);
        memcpy(&pvect[0], p, 4*sizeof(float));
        pp.push_back(pvect);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值