push_back issue std::vector

push_back issue std::vector

本文关键字:vector std issue back push      更新时间:2023-10-16

OSX 10.7,XCode 4。

我有一个小问题:经过一个选择过程后,我需要将2D vector<vector<float>>推回到3D Vector。它在stl::矢量模板的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]);
}

并且my.h具有这样声明的对象(类的公共成员):

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

如果有帮助的话,fdisVec和fdisVec2也是2d矢量,然而,"if else"语句会按照我的意愿进行响应——我非常怀疑这与此有关。

如果fdisVec[i]==fdisVec2[i]怎么办?

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

尽管cluster.size() == 0将是一个问题(正如@VaughnCato在回答中所讨论的),但访问集群的元素不会导致编译时错误,但在运行程序时很可能会使程序崩溃。

然而,编译时错误是由于clusters[j]期望vector< vector< float > >,而allMfccs[i]只是vector< float >

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

相关文章: