在调试Node结构时,遇到运行时错误“向量下标超出范围”。我正在使用if语句来测试我的集合parents
是否为空,以确定其子项是否“可用”。当它检查设置为空的node
的{{1}}时,抛出该错误。
isUsable位于Node结构中:
parents
从主叫方:
bool isUsable() {
if (parents.size() == 0) //<-- Error here
return false;
else
return true;
}
相关声明:
for (int c = 0; c < nodes.size(); c++) {
if (!nodes[c]->isUsable()) {
nodes[c]->setParent(*nodes[-1]);
}
}
我尝试使用:
vector<Node*> nodes;
set<Node*> parents;
全部返回相同的错误。我该如何解决此问题,或者还有另一种方法可以检查向量是否为空?
答案 0 :(得分:0)
允许对数组进行负索引但有一些限制。
例如:
std::vector<int> vectInt = {12, 23, 34, 45};
int x = vectInt [-1]; // invalid; out of range
但这没关系:
std::vector<int> vectInt = {12, 23, 34, 45};
int* p = &vectInt[1];
int x = p[-1]; // valid: accesses arr[0]
摘自CPP标准工作草案(N4713):
11.3.4数组[dcl.array]
...
注意:除了为类声明的地方,下标运算符[]的解释方式为E1 [E2]与*((E1)+(E2))相同。由于适用于+的转换规则,如果E1是一个数组,而E2是一个整数,则E1 [E2]引用E1的第E2个成员。因此,尽管其外观不对称,但下标还是可交换的。 —尾注]
下标运算符[]
是为vector
定义的。由于vector
类具有定义的back
函数,该函数访问最后一个元素,因此应使用该函数。