QT中QVector报错“index out of range”
可以先看看QT5 的include/QtCore目录下的qvertor.h文件,这里面介绍了报错的详细信息。
举个例子:
template <typename T>
inline T &QVector<T>::operator[](int i)
{ Q_ASSERT_X(i >= 0 && i < d->size, "QVector<T>::operator[]", "index out of range");
return data()[i]; }
对数组访问超界就会报上面的错。
值得注意的是,如果我们事先没有为Qvector分配空间,直接采用了数组下标的方式访问了QVector(即QVector[n]的形式),也会报访问超界的错。
解决方案如下,写个代码例子:
struct Node
{
int u;
int w;
Node(int a, int b) :u(a), w(b){}
};
QVector<QList<Node>> V; //变量申明,此时还没有分配内存
int n=9;
QList<Node> list;
for(int i=0;i<n;i++)
{
V.apend(list); //使用apend动态分配内存
V[i].push_back(Node(i,i)); //这样就可以使用V[i]进行赋值了
}
暂时这样就可以解决了,QVector中还有一个reserve(int size)的函数,也可以预先分配size个对象的内存,我尝试过了,没怎么成功,当然以后会完善这个函数的使用方法。