运行时错误:矢量下标超出范围:正在检查空集
RunTime Error: Vector Subscript Out of Range: Checking Empty Set
在调试我的 Node 结构期间,我遇到了运行时错误"矢量下标超出范围"。我正在使用 if 语句来测试我的设置parents
是否为空,以确定其子项是否"可用"。当它检查设置了空parents
的node
时,将引发错误。
isAvailableable 位于 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
类定义了访问最后一个元素的back
函数,因此您应该使用它。
相关文章:
- 运行时错误:矢量下标超出范围:正在检查空集
- C++创建空 HDF5 文件而不是数据集的代码
- 正在尝试确定转换后的范围是否为空
- 空集"Out of bound iterator"
- C++17模板演绎指南不用于空参数集?
- 矢量超出范围,将值分配给空矢量>不可能?
- 为什么编译器不优化集合元素上的空范围循环?
- 根据 [basic.def.odr]/2,'A::a[0]' 的潜在结果集为空.为什么它是空的?
- C++17 模板推导指南未用于空参数集(版本 2)?
- regex_search返回 true,但regex_match返回空匹配集
- 空的卷曲支架{}作为范围的末端
- 如何使用 SOCI 正确声明空行集
- 内联程序集分支目标超出范围
- 如何将 std::set 的元素添加到另一个非空集
- 标准算法 any_of()、all_of() 和 none_of() 应用于空范围
- 错误:“内存集”未在此范围内声明
- 当试图在C++eclipse工作区中导出一个团队集(5个项目)时,项目列表是空的
- 返回一个带有 "return std::set<int>()" 的空集 - 为什么它会运行?
- c++ mysql连接器检查结果集为空
- Mysql的结果集总是空的