繁体   English   中英

迭代某个类的向量列表(C ++)

[英]iterating on a list of vectors of some class (C++)

谁能为我提供帮助,为什么这段代码会给我内部循环的分段错误?

我正在尝试迭代某些类块的向量列表。

class chain
{
    list<vector<Block*>* >* _blockChain;
}

Chain* someChain = new Chain();

for(list<vector<Block*>*>::iterator listIter = someChain->getChain()->end() ;
        listIter != someChain->getChain()->begin(); listIter--)
{
    for(vector<Block*>::iterator it = (*listIter)->begin();
        it != (*listIter)->end() ; it++)
    {
         //do something
    }
}

首次尝试访问listIter它指向不被取消引用的end() 在内部循环中,您取消引用listIter并尝试使用它。

来自http://en.cppreference.com/w/cpp/container/vector/end

此元素充当占位符; 尝试访问它会导致未定义的行为。

如果要反向遍历列表,请使用reverse_iterator:

for(list<vector<Block*>*>::reverse_iterator listIter = someChain->getChain()->rbegin();
        listIter != someChain->getChain()->rend(); ++listIter)

使用最新的编译器,您可以将其压缩一些:

for (auto listIter = someChain->getChain()->rbegin();
            listIter != someChain->getChain()->rend(); ++listIter)

这就是说,我同意@Mike西摩:您正在使用太多指针。 举一个非常明显的例子,几乎没有理由使用指向向量的指针(因为向量本身仅是指向数据的指针的包装器,还有一些额外的数据用于簿记关于其中有多少数据向量)。

我认为您在List::end()List::begin()遇到崩溃。 这是因为您尚未在代码中的任何地方初始化List (至少在给定的代码中我没有看到)。 你需要:

class Chain{

    Chain()
    {
        _blockChain = new list<vector<int*>* >;
        // initializing Vector and so on
    }
};

尽管这不是您的所有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM