我正在尝试使用2D矢量将大量矢量分割成块。
问题是当我运行程序时,我得到一个分段错误:11错误。这是代码:
vector< vector<double> > Audio::something(vector<double>& theData, int N, int M)
{
int n = theData.size();
int maxblockstart = n - N;
int lastblockstart = maxblockstart - (maxblockstart % M);
int numblocks = (lastblockstart)/M + 1;
vector< vector<double> > subBlock;
this->width = N;
this->height = numblocks;
for(int i=0; (i < numblocks); i++)
{
for(int j=0; (j < N); j++)
{
subBlock[i][j] = theData[i*N+j];
}
}
return subBlock;
}
我在想的是实现一个临时向量,它存储(theData [i * N + j])的结果,然后推回到2D向量内部,但是,这不起作用..任何想法?谢谢:))
P.S。忽略方法名称“something”它就是我为测试目的而命名的东西,一旦我解决了这个问题,我就会改变它!
答案 0 :(得分:3)
您必须使用方法push_back
将数据插入向量
for(int i=0; (i < numblocks); i++)
{
subBlock.push_back(vector<double>());
for(int j=0; (j < N); j++)
{
subBlock[i].push_back(theData[i*N+j]);
}
}
答案 1 :(得分:3)
这是一个问题:
subBlock[i][j] = theData[i*N+j];
因为subBlock
是默认构造的,因此不包含任何条目。在使用之前,您需要在subBlock
中添加元素。您可以使用以下std::vector::vector()
构造函数构建numblocks
个vector<double>
个N
个向量,vector<vector<double> > subBlock(numblocks, vector<double>(N));
双倍的向量:
for
并且{{1}}循环保持原样。