[英]RunTime Error: Vector Subscript Out of Range: Checking Empty Set
在調試我的Node結構的過程中,我遇到了運行時錯誤“向量下標超出范圍”。 我正在使用if語句測試我的parents
是否為空,以確定其孩子是否“可用”。 當它檢查具有空parents
集的node
時,拋出該錯誤。
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
類具有定義的back
函數,該函數可以訪問最后一個元素,因此您應該使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.