我正在努力为c ++代码创建一个基本的解析器,该解析器从输入代码中提取有关类的信息。为此,我有一种方法,该方法从迭代器位置开始查找数据成员,直到遇到某些字符串,例如“ public”,“ protected”,“};”。字符串在矢量中传递,因为我也必须将函数用于其他断点,因此,字符串的数量无法固定。当我不知道在哪个下标处停止时,如何在循环条件下获取向量的元素? 看起来像这样:
while(a != vect[0] && a != vect[1] .... && a != vect[END VALUE]) {
//loop body
}
END VALUE可以是任何数字。
这可能吗? 希望我能很好地解释我的查询。我在代码中使用迭代器。用下标只是为了解释我的查询。
谢谢!
答案 0 :(得分:1)
在注释中,您担心“我必须遍历循环条件内的向量”,但是任何实现都必须遍历每个元素以验证其是否可以继续。
您的循环条件可以表示为“如果在a
中找到vect
,则停止”,并且可以看到<algorithm>
中已经有一个不错的std::find
。 std::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;
}