运行时错误:向量下标超出范围:检查空集

阿什·斯基普沃思

在调试我的 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由于vectorclassback定义了一个访问最后一个元素函数,因此您应该使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

紧急:运行时错误:索引超出范围1

紧急:运行时错误:索引超出范围

更改工作表代号运行时错误9:下标超出范围

Excel宏运行时错误'9':下标超出范围(在要复制的循环中)

为什么会出现运行时错误:向量擦除迭代器超出范围

VBA:复制范围。运行时错误9-下标超出范围

选择工作簿时出现运行时错误9下标超出范围

Microsoft Visual Basic-Access 2016-运行时错误'9':下标超出范围

VBA运行时错误“ 9”下标超出范围

ThisWorkbook.Sheets(“ Sheet1”)生成运行时错误“ 9”下标超出范围

Windows.Activate-运行时错误'9':下标超出范围-使用通配符“ *”时

运行时错误'1004'指定的值超出范围

向量下标超出范围错误消息3

下标超出范围运行时错误9

运行时错误9-下标超出范围

处理运行时错误'9':在工作表上迭代时下标超出范围

为什么VB6 FlexGrid抛出运行时错误381'下标超出范围'?

运行时错误“ 9”:下标超出范围

运行时错误'9':下标超出了WorksheetFunction的范围

在另一个工作簿中查找单元格地址,其值为:“运行时错误'9'下标超出范围”

C ++向量下标超出范围错误

读取字符串向量时超出范围运行时错误

选择工作表:运行时错误“9”:下标超出范围

VBA 错误:运行时错误:9 - 从另一个工作簿复制工作表时下标超出范围

运行时错误:Excel 宏 2016 中的“9”下标超出范围

无法将工作表名称设置为变量,返回“运行时错误‘9’:下标超出范围”

运行时错误 9,下标超出范围 - 尝试将信息复制到另一个工作表

正则表达式 vba 脚本抛出错误:运行时错误 9 ...下标超出范围

当我运行宏时,我收到此错误。运行时错误9:下标超出范围错误