在调试我的 Node 结构时,我遇到了一个运行时错误“向量下标超出范围”。我正在使用 if 语句来测试我的集合parents
是否为空,以确定其子项是否“可用”。当它检查node
具有空parents
集的a 时抛出错误。
isUsable 位于 Node 结构中:
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;
我试过使用:
parents.size() == 0
!parents.empty()
parents.begin() == parents.end()
都返回相同的错误。我该如何解决这个问题,或者有没有其他方法可以检查向量是否为空?
允许对数组进行负索引,但有一些限制。
例如:
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
classback
定义了一个访问最后一个元素的函数,因此您应该使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句