循环直到没有遇到std :: vector的任何元素

时间:2019-04-26 14:14:29

标签: c++ loops c++11 vector

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

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

END VALUE可以是任何数字。

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

谢谢!

3 个答案:

答案 0 :(得分:1)

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

您的循环条件可以表示为“如果在a中找到vect,则停止”,并且可以看到<algorithm>中已经有一个不错的std::findstd::find返回一个迭代器,该迭代器指向找到元素的位置;如果找不到元素,则返回end

while(std::find(vect.begin(), vect.end(), a) == vect.end()) {
    //loop body
}

答案 1 :(得分: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;
}

答案 2 :(得分: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;
}