C++ 枚举输入数据序列的方法
有两种方法可以遍历和处理一系列数据,但当事情变得更加复杂时,也会变得相当困难 如果每个操作都是独立的,那么生活就简单了: [1] 修改C++ 枚举输入数据序列的方法,c++,design-patterns,styles,iteration,traversal,C++,Design Patterns,Styles,Iteration,Traversal,有两种方法可以遍历和处理一系列数据,但当事情变得更加复杂时,也会变得相当困难 如果每个操作都是独立的,那么生活就简单了: [1] 修改 for(auto&& x : v) x += 1; [2] 通路 for(const auto& x : v) sum += x; 如果事情变得更复杂,处理元素的方法取决于上下文(例如解析)。然后我们必须维护一个自动装置: [1] 显式状态 // I think this method is quite unintui
for(auto&& x : v)
x += 1;
[2] 通路
for(const auto& x : v)
sum += x;
如果事情变得更复杂,处理元素的方法取决于上下文(例如解析)。然后我们必须维护一个自动装置:
[1] 显式状态
// I think this method is quite unintuitive though
auto state = kDefaultState;
for(const auto& x : v)
{
if(state == kFirstState)
{
// deal with x...
// transfer state
}
else if(state == kSecondState)
{
// deal with x...
// transfer state
}
else
{
// ...
}
}
[2] 隐藏在代码流中的隐式状态(创建读取器类)
我想知道是否有其他更好的方式来处理此类问题。看看模式。这是一个相当广泛的问题。即使将问题归结为如何表示数据并将数据注入有限状态机的问题,它仍然过于宽泛。
// this method require a lot more extra coding and redundant bound check
auto reader = CreateReader(...);
while(reader.Exhausted())
{
if(reader.Try(...))
{
// ...
}
}
while(reader.Exhausted())
{
// ...
}