1

我正在尝试使用 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 向量内部,但是,这不起作用..有什么想法吗?谢谢 :)

PS忽略方法名称“something”,这只是我为测试目的而命名的,一旦我解决了这个问题,我会改变它!

4

2 回答 2

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]);
    } 
}
于 2012-09-28T10:44:54.943 回答
3

这是一个问题:

subBlock[i][j] = theData[i*N+j];

subBlock默认构造相同,因此不包含任何条目。在使用它们之前,您需要将元素添加到subBlock其中。您可以使用以下构造函数构造每个带有双精度numblocks数的向量:vector<double>Nstd::vector::vector()

vector<vector<double> > subBlock(numblocks, vector<double>(N));

并且for循环保持原样。

于 2012-09-28T10:45:07.377 回答