2D矢量分段

时间:2012-09-28 10:41:52

标签: c++ vector matrix

我正在尝试使用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”它就是我为测试目的而命名的东西,一旦我解决了这个问题,我就会改变它!

2 个答案:

答案 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()构造函数构建numblocksvector<double>N个向量,vector<vector<double> > subBlock(numblocks, vector<double>(N)); 双倍的向量:

for

并且{{1}}循环保持原样。