我的向量无法访问存在的元素?

时间:2018-08-24 16:00:16

标签: c++ vector

我创建了一个程序,该程序读取数据(并返回每个令牌),如果流中遇到某个值,则将其替换为另一个值或一系列其他值。

例如:

name: [name]
id:   [ID]

应该给出:

name: Bob
id:   23 87 87 9

这是我的代码的样子:

token lexer::next() {
    token ret;
    if (IsData) {
        if (DataValue.empty()) IsData = false;
        else {
            ret = DataValue.front();
            DataValue.erase(DataValue.begin());
            return ret
        }
    }

    // some code to manage others tokens (a value is also assigned to 'ret')

    if (Datas.IsData(ret.value)) {
        // here, ret.value represent the '[value]' saw above
        DataValue = Datas.get(ret.value);
        IsData = true;
        return next();
    }

    return ret; // for "normal" tokens

}

DataValue仅仅是std::vector<token>。并且每次我们返回第一个元素时,该元素都会被删除,直到没有更多为止。

只有一个替换值时,它起作用。但除此之外,我还会收到此错误消息:

share ledger amoing chaincode

我不明白...我唯一的假设是,由于该函数一次不能返回一个以上的令牌,因此它侵占了其他调用(因为要替换的de值可以计数超过1个令牌)。但是我不确定。

你有什么主意吗?

1 个答案:

答案 0 :(得分:0)

如果我正确地遵循了您的解释和您的代码,则似乎此行是罪魁祸首:

DataValue = Datas.get(ret.value);

DataValue是一个包含多个元素的向量;您已经删除了第一个(带有.erase(DataValue.begin())),现在应该代替它。

但是-由于您没有提供minimal, complete and verifiable example,因此很难确定问题出在哪里。

PS-注意,移除向量的第一个元素并添加另一个第一个元素通常效率不高-您将反复移动整个向量的上下文。