gpt4 book ai didi

c++ - 如何遍历嵌套 vector ?

转载 作者:行者123 更新时间:2023-12-03 07:21:54 26 4
gpt4 key购买 nike

我对我的作品有一个相当复杂的有序内部语法表示,它由类型化的std libarary类组成:

class Grammar {
std::tuple<int, NonTerminal, std::vector<std::vector<Symbol>>> productions;
}
现在,我想根据此表示创建LR0-Items。
从内到外:
  • std::vector<Symbol>表示规则
  • std::vector<std::vector<Symbol>>表示生产的替代规则。
  • NonTerminal, std::vector<std::vector<Symbol>>>表示生产
  • 的lhs
  • std::tuple<int, NonTerminal, std::vector<std::vector<Symbol>>>表示作品的顺序。

  • 问题:如何遍历作品?我是C++的新手。据我所知,方法是通过 ::iterator。但是,然后 如何处理一个嵌套数据类型以从中构建迭代器?
    谢谢
    编辑:
    我认为最好是让定义由两次 std::tuple组成,而不是 std::pair:
    std::pair<int, std::pair<NonTerminal, std::vector<std::vector<Symbol>>> productions;
    我尝试采用 idclev 463035818用户的答案
    for( const &auto production : productions.back) {
    for( const &auto alternatives : production.back) {
    for( const &auto rule : alternatives) {
    // ...
    }
    }
    }
    对吗

    最佳答案

    要迭代其元素类型为T的 vector ,可以使用基于范围的for循环:

    std::vector<T> vect;
    for (const auto& element : vect) {
    // element is a const reference to elements of vect
    // put code here
    }
    现在,如果 T再次是一个 vector ,则只需将 //put code here替换为您的代码即可迭代该 vector element

    嵌套容器并不像您预期​​的那样复杂。它不需要特殊处理。如果您知道如何迭代一个 vector 并获得对其元素的引用,那么您已经知道如何迭代那些元素(如果它们是 vector )。

    假设您有一个 std::vector<std::vector<Symbol>>>(我跳过了元组,因为我想您不想“迭代”它,而只是从中选择第三个元素)。
    std::vector<std::vector<Symbol>>> vect_vect;

    for (const auto& vect : vect_vect) {
    // here vect is a const reference to std::vector<Symbol>
    for (const auto& symbol : vect) {
    // here symbol is a const reference to a Symbol
    // put your code here
    // eg assuming Symbol has a member get_bar
    auto foo = symbol.get_bar();
    }
    }

    关于c++ - 如何遍历嵌套 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64857449/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com