工程中有时需要把数组或vector中的数据分成几段并分别保存。
直接看例子:
- 问题:需要把长度为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);
}