标准/ Boost工具,用于推进迭代器,直到命中结束符或分隔符
Standard / Boost facility for advancing an iterator until either the end or a delimiter is hit?
标准库提供了std::advance
,但它只将迭代器推进到给定的偏移量。
自己写这个算法很简单:
template<class Iter, class T>
void advance_until(Iter& it, Iter end, T const& delim){
while(it != end && *it != delim)
++it;
}
甚至:
template<class Iter, class T>
void unsafe_advance_until(Iter& it, T const& delim){
while(*it != delim)
++it;
}
这将更接近std::advance
的行为方式。
使用例子:
std::string s("hello world!");
std::string::iterator it(s.begin());
advance_until(it, s.end(), 'w');
//unsafe_advance_until(it, 'w');
if(it != s.end())
std::cout << *it << 'n'; // prints 'w'
但是可能在标准库或Boost中已经有类似的东西了,所以我想我应该问一下
这通常被称为std::find()
:
std::string::iterator it = std::find(s.begin(), s.end(), 'w');
if (it == s.end()) { /* not found */ }
else { /* found *it */ }
连续的项可以通过循环找到:
while (it != s.end())
{
// ...
++it; // always valid
it = std::find(it, s.end(), 'w');
}
相关文章:
- 为什么在这个代码结束循环中没有得到结束
- 试图对缓存进行跨步测试,但程序并没有结束
- 当用户键入分隔符时,停止getline()输入
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 为什么擦除方法会影响结束方法
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 删除映射和分割错误中的一个过去结束元素
- 带有多个字符分隔符的正则表达式
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 字符串开头的分隔符
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 在函数结束后使用指向变量的指针是否安全?
- 尝试将 c 字符串数组与分隔符连接起来
- 使用分隔符结束用户输入的循环
- C++解析带有开始和结束分隔符的 std::string
- c++如何用分隔符读取一行,直到每行结束
- Async_read_until在分隔符read之前结束