部署2d向量c ++困难

时间:2015-04-19 16:06:51

标签: c++

我在c ++类中有2d vector private属性,如下所示:

std::vector< std::vector<unsigned int> > m_voisins;

一个用这样的数据填充它的函数:

template<typename N>
void Graphe<N>::initialiseVoisins(size_t n)
{
    m_voisins.resize(n);
    vector <unsigned int> voisins;
    for(unsigned int i=0; i<n; ++i) {
        for(unsigned int u=0; u<n; ++u)
        {
            if(m_matriceAdj[i][u]!=numeric_limits<N>::max() && u!=i)
            {
                voisins.push_back(u);
            }
        }
        m_voisins.push_back(voisins);
        voisins.clear();
    }
}

我可以保证中间的if语句不是问题。我试过没有它,仍然是相同的结果。 问题是我每次打电话似乎都是:

m_voisins[some_valid_index].size()

我得到结果0。

我很想知道为什么会这样? 对我来说实施似乎很好,希望我错了。谢谢。

2 个答案:

答案 0 :(得分:5)

m_voisins.resize(n);

糟糕!现在你最终会得到n*2元素,而前半部分(你正在检查的元素)中没有任何元素。

我确定你的意思是:

m_voisins.reserve(n);

这预先分配内存,以便push_back尽可能快,而不实际添加任何逻辑元素。

答案 1 :(得分:3)

因为您在开头有m_voisins.resize(n);,只会在n的开头创建m_voisins个空向量。

删除m_voisins.resize(n);,或使用m_voisins[i] = voisins;代替push_back()