簡體   English   中英

運行時錯誤:矢量下標超出范圍:檢查空集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM