目录
list
示例代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
//创建一个List<int>对象myList
list<int> myList;
//向myList尾部添加元素
for (int i = 1;i <= 5;i++)
myList.push_back(i);
//从头到尾输出myList中的元素
for (const auto &i : myList) cout << i << ' ';
cout << '\n';
//将myList中的元素反转
reverse(myList.begin(),myList.end());
for (const auto &i : myList) cout << i << ' ';
cout << '\n';
//在第一个元素的后一个位置加上元素0
myList.insert(++myList.begin(),0);
for (auto i : myList) cout << i << ' ';
cout << '\n';
//删除从三个元素到第六个元素这个区间(左闭右开)
myList.erase(++++myList.begin(),--myList.end());
//输出myList的大小
cout << "链表大小为:" << myList.size() << '\n';
//从头到尾输出myList中的元素
for (auto i : myList) cout << i << ' ';
cout << '\n';
return 0;
}
vector
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v = {2,1,3,2,4,1,5,4};
sort(v.begin(),v.end());
auto last = unique(v.begin(),v.end());//指向第一个重复元素的迭代器
v.erase(last,v.end());
for (auto num : v)
cout << num << ' ';
cout << '\n';
return 0;
}
//输出1 2 3 4 5
示例代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v;
//向向量中添加元素
v.push_back(5);
v.push_back(2);
v.push_back(8);
v.push_back(1);
v.push_back(2);
v.push_back(8);
v.push_back(9);
//打印向量中的元素
for (auto i : v)
{
cout << i << ' ';
}
cout << '\n';
//对向量进行排序
sort(v.begin(),v.end());
//打印排序后的向量
cout << "排序后的向量" << '\n';
for (auto i : v)
cout << i << ' ';
cout << '\n';
//去除重复元素
v.erase(unique(v.begin(),v.end()),v.end());
//打印去重后的向量
cout << "去重后的向量" << '\n';
for (auto i : v)
{
cout << i << ' ';
}
cout << '\n';
//向向量中插入元素
v.insert(v.begin()+2,3);
v.insert(v.begin()+3,4);
v.insert(v.begin()+4,5);
//打印新的向量
cout << "插入元素后的向量" << '\n';
for (auto i : v)
{
cout << i << ' ';
}
cout << '\n';
//删除向量中某个元素
v.erase(v.begin()+4);
//打印删除元素后的向量
cout << "删除元素后的向量" << '\n';
for (auto i : v)
{
cout << i << ' ';
}
cout << '\n';
//检查向量是否为空
if (v.empty())
{
cout << "向量为空" << '\n';
} else
{
cout << "向量不为空" << '\n';
}
//获取向量的大小
cout << "向量的大小为:" << v.size() << '\n';
//清空向量
v.clear();
//检查向量是否为空
if (v.empty())
{
cout << "向量为空" << '\n';
} else
{
cout << "向量不为空" << '\n';
}
return 0;
}
set
set
示例代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> mySet;
//插入元素
mySet.insert(5);
mySet.insert(2);
mySet.insert(8);
mySet.insert(2); //重复元素
//遍历集合
cout << "Set elements:";
for (auto elem : mySet) {
cout << elem << ' ';
}
cout << '\n';
//查找元素
int target = 5;
auto it = mySet.find(target);
if (it != mySet.end()) {
cout << target << " found in the set." << endl;
} else {
cout << target << " not found in the set." << endl;
}
//移除元素
int removeValue = 2;
mySet.erase(removeValue);
//查看移除后的集合
cout << "Set elements after removal:";
for (auto elem : mySet) {
cout << elem << ' ';
}
cout << '\n';
//清除集合
mySet.clear();
//检查集合是否为空
if (mySet.empty()) {
cout << "Set is empty." << endl;
} else {
cout << "Set is not empty." << endl;
}
return 0;
}
multiset
示例代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
multiset<int> myMultiset;
//插入元素
myMultiset.insert(5);
myMultiset.insert(2);
myMultiset.insert(8);
myMultiset.insert(2); //允许重复元素
//遍历多重集合
cout << "Multiset elements:";
for (auto elem : myMultiset) {
cout << elem << ' ';
}
cout << '\n';
//查找元素
int searchValue = 5;
auto it = myMultiset.find(searchValue);
if (it != myMultiset.end()) {
cout << searchValue << " found in the multiset." << endl;
} else {
cout << searchValue << " not found in the multiset." << endl;
}
//移除元素
int removeValue = 2;
myMultiset.erase(removeValue);
//查看移除后的多重集合
cout << "Multiset elements after removal:";
for (auto elem : myMultiset) {
cout << elem << ' ';
}
cout << '\n';
// Multiset elements after removal:5 8 所有2都被移除了
//只移除第一个出现的目标值
myMultiset.insert(2);
myMultiset.insert(2);
//遍历多重集合
// cout << "Multiset elements:";
// for (auto elem : myMultiset) {
// cout << elem << ' ';
// }
// cout << '\n';
myMultiset.erase(myMultiset.find(removeValue));
//查看去除第一个出现目标元素后的多重集合
cout << "Multiset elements:";
for (auto elem : myMultiset) {
cout << elem << ' ';
}
cout << '\n';
//Multiset elements:2 5 8
//清空多重集合
myMultiset.clear();
//检查多重集合是否为空
if (myMultiset.empty()) {
cout << "Multiset is empty." << endl;
} else {
cout << "Multiset is not empty." << endl;
}
return 0;
}
unordered_set(仅做了解)
map
map
示例代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
//创建并初始化map
map<int,string> myMap = {{1,"Apple"},{2,"Banana"},{3,"Orange"}};
//插入元素 insert
myMap.insert({4,"Grapes"}); //或者使用make_pair(4,"Grapes")创建键值对
//查找和访问元素 通过键去查找值
cout << "Value at key 2:" << myMap[2] << endl;
//遍历并打印map中的元素
for (auto t : myMap) {
cout << "Key:" << t.first << ",Value:" << t.second << endl;
}
//删除元素
myMap.erase(3);
//判断元素是否存在
if (myMap.count(3) == 0) {
cout << "Key 3 not found." << endl;
}
//清空map
myMap.clear();
//判断map是否为空
if (myMap.size() == 0) { //或者用myMap.empty()来判断
cout << "Map is empty" << endl;
}
return 0;
}
multimap
unordered_map
pair
示例代码
#include <bits/stdc++.h>
using namespace std;
//定义一个结构体,用来表示个人信息
struct Person {
string name;
int age;
};
int main() {
//创建一个存储Person对象的向量
vector<Person> people;
//添加一些Person对象到向量中去
people.push_back({"Alice",25});
people.push_back({"Bob",30});
people.push_back({"Charlie",20});
//创建一个存储pair的向量,每个pair包含一个Person和一个评分
vector<pair<Person,int>> scores;
//添加一些pair到向量中
scores.push_back({people[0],90});
scores.push_back({people[1],85});
scores.push_back({people[0],90});
for (const auto& t : scores) { //const表示不会对数据进行修改 &表示引用类型
cout << "Name:" << t.first.name << endl;
cout << "Age :" << t.first.age << endl;
cout << "Score:" << t.second << endl;
cout << endl;
}
return 0;
}
queue
queue
例题练习
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;cin >> n;
queue<string> V,N;
while (n--) {
string op;cin >> op;
if (op == "IN") {
string name,q;cin >> name >> q;
if (q == "V") {
V.push(name);
}else {
N.push(name);
}
}else {
string q;cin >> q;
if (q == "V") V.pop();
else N.pop();
}
}
while (V.size()) {
cout << V.front() << endl;
V.pop();
}
while (N.size()) {
cout << N.front() << endl;
N.pop();
}
return 0;
}
priority_queue优先队列(重要)
例题练习
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
priority_queue<ll,vector<ll>,greater<ll>> pq;
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin >> n;
for (int i = 1;i <= n;i++) {
ll x;cin >> x;
pq.push(x);
}
ll ans = 0;
while (pq.size() >= 2) {
ll x = pq.top();pq.pop();
ll y = pq.top();pq.pop();
ans += x + y;
pq.push(x+y);
}
cout << ans << endl;
return 0;
}
deque双端队列
stack
示例代码
#include <bits/stdc++.h>
using namespace std;
int main() {
stack<int> myStack;
//向栈中插入元素
myStack.push(10);
myStack.push(20);
myStack.push(30);
myStack.push(40);
//获取栈顶元素
cout << "栈顶元素:" << myStack.top() << endl;
//弹出栈顶元素
myStack.pop();
//再次获取栈顶元素
cout << "栈顶元素:" << myStack.top() << endl;
//检查栈是否为空
if (myStack.empty()) {
cout << "栈为空" << endl;
} else {
cout << "栈不为空" << endl;
}
//获取栈的大小
cout << "栈的大小:" << myStack.size() << endl;
return 0;
}