我在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.
我很想知道为什么会这样?对我来说实施似乎很好,希望我错了.谢谢.
m_voisins.resize(n);
Run Code Online (Sandbox Code Playgroud)
哎呦!现在你将最终得到n*2元素,而前半部分(你正在检查的元素)中没有任何内容.
我相信你的意思是:
m_voisins.reserve(n);
Run Code Online (Sandbox Code Playgroud)
这预先分配内存,以便push_backs尽可能快,而不实际添加任何逻辑元素.