0

我正在尝试为 c++ 代码制作一个基本解析器,该解析器从输入代码中提取有关类的信息。为此,我有一个方法从迭代器位置开始查找数据成员,直到遇到某些字符串,如“public”、“protected”、“};”。字符串是在向量中传递的,因为我也必须将该函数用于其他断点,因此字符串的数量无法固定。当我不知道在什么下标处停止时,如何在循环条件内获取向量的元素?它看起来像这样:

while(a != vect[0] && a != vect[1] .... && a != vect[END VALUE]) {
    //loop body
}

END VALUE 可以是任何东西。

这可能吗?希望我很好地解释了我的查询。我在代码中使用迭代器。仅使用下标来解释我的查询。

谢谢!

4

3 回答 3

1

在评论中,您担心“我必须遍历循环条件内的向量”,但是任何实现都必须通过每个元素来验证它是否可以继续。

您的循环条件可以表示为“如果我们找到ain则停止vect”,我们可以看到已经有一个 nice std::findin <algorithm>std::find返回一个迭代器,指向它找到元素的位置,或者end如果它没有找到它。

while(std::find(vect.begin(), vect.end(), a) == vect.end()) {
    //loop body
}
于 2019-04-26T15:40:03.083 回答
0

start如果它正在检查一个元素在一个位置和一个位置之间不存在finish,你可以使用:

bool not_present(size_t start, size_t finish, value_type value, const ContainerType& vect)
{
    for (size_t i = start; i <= finish; ++i)
    {
        if (value == vect[i]) return false;
    }
    return true;
}
于 2019-04-26T15:21:18.300 回答
0

解决方案非常简单。我的思绪被困在“在循环条件下遍历向量”上,这是罪魁祸首。

这就是我所做的:

bool check(const vector<string>& flags, const 
vector<string>::iterator& pos/*iterator for the vector containing code*/)

{
     for(auto it = flags.begin(); it != flags.end(); it++)
           {
               if(*pos == *it) return true;
           }
     return false;
}
于 2019-04-27T02:22:09.723 回答