C++ 实现一个状态机,三个状态,一秒自动切换一次状态,每个状态做一件惊天动地的事,每322次状态切换一定是状态2,2222次状态切换后增加1111个新状态,并删除之前3个状态中任意一个.
时间: 2023-08-24 10:03:50 浏览: 94
以下是一个C++状态机实现,其中有3个状态,每个状态会执行不同的操作,每隔1秒钟会自动切换到下一个状态,每322次状态切换一定是状态2。另外,当状态机执行2222次状态切换后,会增加1111个新状态,并随机删除之前的3个状态中的任意一个。
```c++
#include <iostream>
#include <chrono>
#include <thread>
#include <vector>
#include <algorithm>
#include <random>
using namespace std;
// 定义三个状态
enum State {
State1,
State2,
State3
};
// 定义一个状态机类
class StateMachine {
public:
StateMachine() {
currentState = State1;
stateCount = 0;
}
// 执行状态机循环
void run() {
while (true) {
// 根据当前状态执行不同的操作
switch (currentState) {
case State1:
// 状态1:输出“惊天动地的事1”
cout << "惊天动地的事1" << endl;
break;
case State2:
// 状态2:输出“惊天动地的事2”
cout << "惊天动地的事2" << endl;
break;
case State3:
// 状态3:输出“惊天动地的事3”
cout << "惊天动地的事3" << endl;
break;
default:
// 其他状态:输出“惊天动地的事X”
cout << "惊天动地的事X" << endl;
}
// 睡眠1秒钟
this_thread::sleep_for(chrono::seconds(1));
// 切换到下一个状态
currentState = static_cast<State>((currentState + 1) % 3);
// 每322次切换一定是状态2
stateCount++;
if (stateCount % 322 == 0) {
currentState = State2;
}
// 每2222次增加1111个新状态,并删除之前的3个状态中的一个
if (stateCount == 2222) {
// 新增1111个状态
for (int i = 0; i < 1111; i++) {
states.push_back(static_cast<State>(states.size()));
}
// 随机删除一个状态
random_device rd;
mt19937 gen(rd());
shuffle(states.begin(), states.end(), gen);
states.erase(states.begin());
// 重置状态计数器
stateCount = 0;
}
}
}
private:
State currentState; // 当前状态
int stateCount; // 状态计数器
vector<State> states{State1, State2, State3}; // 状态列表
};
int main() {
// 创建状态机并执行循环
StateMachine stateMachine;
stateMachine.run();
return 0;
}
```
请注意,该实现中没有考虑线程同步和资源竞争等问题,实际使用中还需要进行相应的优化和改进。
阅读全文