重新写代码应用了vector、栈和stack、队列和queue、优先队列和priority_queue、、链表和list、set、map;sort;next_permutation的C代码
时间: 2025-03-10 20:07:38 浏览: 43
好的,下面将为您展示一段综合运用了 `vector`, 栈 (`stack`), 队列 (`queue`), 优先队列 (`priority_queue`), 双向链表 (`list`), `set`, `map`, 排序算法 (`sort`) 和排列组合生成器 (`next_permutation`) 的 C++ 程序示例。这个程序的功能是从一组整数中找到所有可能的不同排序结果,并统计每个数字出现的频率。
```cpp
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
#include <algorithm> // for sort and next_permutation
using namespace std;
int main() {
vector<int> numbers = {4, 2, 6}; // 初始数据集
// 创建并操作各种容器
stack<int> s; // 后进先出 (LIFO)
queue<int> q; // 先进先出 (FIFO)
list<int> l(numbers.begin(), numbers.end()); // 双向链表初始化
set<int> unique_set(numbers.begin(), numbers.end()); // 自动去除重复元素
map<int, int> frequency_map; // 记录各元素出现次数
priority_queue<int> pq; // 默认最大堆
// 将初始数据放入各个容器中
for (auto num : numbers) {
s.push(num);
q.push(num);
++frequency_map[num]; // 统计频次
pq.push(num);
}
// 打印原始数组及其排好序的形式
cout << "Original array: ";
for_each(begin(numbers), end(numbers), [](int n){cout << n << ' ';});
cout << "\nSorted array: ";
sort(begin(numbers), end(numbers)); // 对原数组进行升序排序
for_each(begin(numbers), end(numbers), [](int n){cout << n << ' ';});
cout << '\n';
// 展示所有的全排列形式
do {
for(auto& elem : numbers){
cout << elem << ' ';
}
cout << '\n';
} while(next_permutation(begin(numbers), end(numbers))); // 获取下一个排列
// 操作其他容器的内容
cout << "\nPopping from Stack(LIFO):";
while (!s.empty()) {
cout << ' ' << s.top();
s.pop();
}
cout << "\nPopping from Queue(FIFO):";
while (!q.empty()) {
cout << ' ' << q.front();
q.pop();
}
cout << "\nPriority Queue contents:";
while(!pq.empty()){
cout << ' ' << pq.top(); // 最大值总是位于顶部
pq.pop();
}
// 显示双向链表内容
cout << "\nList content: ";
for(int val:l){
cout<<val<<" "; // 输出链表里的每一个数值
}
// 显示唯一集合内容
cout<<"\nSet Content: ";
for(set<int>::iterator it=unique_set.begin();it!=unique_set.end();++it){
cout<<*it<<" "; // 迭代访问整个集合内的全部数值
}
// 显示映射表信息(包括键和对应的值)
cout<<"\nFrequency Map:\n";
for(map<int,int>::iterator mit=frequency_map.begin();mit!=frequency_map.end();++mit){
cout<<(*mit).first<<" occurs "<<(*mit).second<<" times.\n";
}
return 0;
}
```
此代码片段展示了如何使用 STL 容器来存储不同类型的数据以及一些常用的算法库函数。请注意,在实际应用场景下应当根据需求选择合适的容器类型及相应的迭代策略。此外,这里使用的是一些基础的操作演示,您还可以进一步探索更多复杂的用法如自定义比较器等特性以满足特定的需求。
---
阅读全文
相关推荐



















