部署2d向量c ++困难

Ale*_*ube 0 c++

我在c ++类中定义了2d vector私有属性,如下所示:

std::vector< std::vector<unsigned int> > m_voisins;
Run Code Online (Sandbox Code Playgroud)

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

m_voisins[some_valid_index].size()
Run Code Online (Sandbox Code Playgroud)

我得到结果0.

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

Lig*_*ica 5

m_voisins.resize(n);
Run Code Online (Sandbox Code Playgroud)

哎呦!现在你将最终得到n*2元素,而前半部分(你正在检查的元素)中没有任何内容.

我相信你的意思是:

m_voisins.reserve(n);
Run Code Online (Sandbox Code Playgroud)

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