push_back问题std :: vector

时间:2012-04-04 13:38:10

标签: c++ vector push-back

OSX 10.7,XCode 4.

我遇到一个小问题:在选择过程后,我需要将2D vector<vector<float>>推回到3D矢量中。它会在stl :: vector模板的push_back函数中抛出EXC_BAD_ACCESS错误。看起来它应该很简单(我以前曾多次使用复杂的数据结构),我尝试了不同的想法,但无济于事。其他所有工作都会将我期望的值输出到命令行。我确定它的代码是盲目的,还有一些容易代表的代码。

我只是因为我相信我的语法是正确的,但是在编译时我遇到了问题。下面是一些示例代码:

实现:

for(int i=0;i<fdisVec.size();i++){

    int j;

        if(fdisVec[i] < fdisVec2[i]){

            j = 0;

        }

        else if(fdisVec2[i] < fdisVec[i]){

            j = 1;

        }

    clusters[j].push_back(allMfccs[i]);

}

和我的.h具有声明的对象(类的公共成员):

    vector< vector <float> > allMfccs;
    vector< vector < vector <float> > > clusters; 

如果它有帮助,fdisVec和fdisVec2也是2d向量,但是,“if else”语句会响应我想要的方式 - 我非常怀疑它是否与此有关。

2 个答案:

答案 0 :(得分:1)

如果fdisVec [i] == fdisVec2 [i]?

怎么办?

在这种情况下,j保持未初始化(垃圾),有时该值不是群集向量的有效索引。

答案 1 :(得分:1)

尽管cluster.size() == 0会出现问题(如@VaughnCato的回答所述),访问群集元素不会导致编译时错误,但很可能会在您崩溃时失败运行。

但是,编译时错误是由于clusters[j]期望vector< vector< float > >allMfccs[i]只是vector< float >这一事实。

因此,根据您对clustersallMfccs的声明,您需要推送allMfccs