策略模式c++代码要求200行
时间: 2023-10-26 20:05:00 浏览: 40
以下是一个简单的 C++ 策略模式示例,用于根据不同的算法选择不同的策略:
```cpp
#include <iostream>
#include <vector>
// 策略接口
class Strategy {
public:
virtual ~Strategy() {}
virtual void sort(std::vector<int>& data) const = 0;
};
// 冒泡排序策略
class BubbleSortStrategy : public Strategy {
public:
void sort(std::vector<int>& data) const override {
int n = data.size();
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (data[j] > data[j + 1]) {
std::swap(data[j], data[j + 1]);
}
}
}
}
};
// 快速排序策略
class QuickSortStrategy : public Strategy {
public:
void sort(std::vector<int>& data) const override {
quickSort(data, 0, data.size() - 1);
}
private:
void quickSort(std::vector<int>& data, int left, int right) const {
if (left >= right) {
return;
}
int pivot = partition(data, left, right);
quickSort(data, left, pivot - 1);
quickSort(data, pivot + 1, right);
}
int partition(std::vector<int>& data, int left, int right) const {
int pivot = data[right];
int i = left - 1;
for (int j = left; j < right; ++j) {
if (data[j] < pivot) {
std::swap(data[++i], data[j]);
}
}
std::swap(data[++i], data[right]);
return i;
}
};
// 策略选择器
class StrategySelector {
public:
StrategySelector(Strategy* strategy) : strategy_(strategy) {}
void setStrategy(Strategy* strategy) {
strategy_ = strategy;
}
void sort(std::vector<int>& data) const {
strategy_->sort(data);
}
private:
Strategy* strategy_;
};
int main() {
std::vector<int> data{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
BubbleSortStrategy bubble_sort;
QuickSortStrategy quick_sort;
StrategySelector selector(&bubble_sort);
selector.sort(data);
std::cout << "Bubble sort: ";
for (int val : data) {
std::cout << val << " ";
}
std::cout << std::endl;
selector.setStrategy(&quick_sort);
selector.sort(data);
std::cout << "Quick sort: ";
for (int val : data) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}
```
在这个示例中,我们定义了两种排序算法:冒泡排序和快速排序。然后,我们使用 `Strategy` 接口来定义排序策略,并实现了具体的排序算法。接着,我们创建了一个 `StrategySelector` 类来选择使用哪种排序策略。最后,在 `main` 函数中,我们创建了一个 `StrategySelector` 类的实例,并选择使用冒泡排序进行排序,然后输出排序结果。接着,我们将选择使用快速排序进行排序,并再次输出排序结果。
需要注意的是,这个示例只是给出了一个极简的策略模式示例,实际应用中,可能会有更复杂的算法和更多的策略。