stl第一部分: string, vector, deque, stack

This commit is contained in:
2023-08-04 09:28:07 +08:00
parent 82619cea98
commit 9290e4c051
23 changed files with 1448 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
// deque 的使用
// deque 是一个双端队列,可以在队列的头部和尾部进行插入和删除操作
// deque 的常用操作
// push_back() 在队列尾部插入元素
// push_front() 在队列头部插入元素
// front() 访问队列头部元素
// back() 访问队列尾部元素
// pop_front() 删除队列头部元素
// pop_back() 删除队列尾部元素
// size() 队列的大小
// empty() 队列是否为空
// clear() 清空队列
// erase() 删除指定位置的元素
// insert() 在指定位置插入元素
// operator[] 访问指定位置的元素
// at() 访问指定位置的元素
// begin() 返回指向队列头部的迭代器
// end() 返回指向队列尾部的迭代器
// rbegin() 返回指向队列尾部的逆向迭代器
// rend() 返回指向队列头部的逆向迭代器
// swap() 交换两个队列
// emplace() 在指定位置构造元素
// emplace_front() 在队列头部构造元素
// emplace_back() 在队列尾部构造元素
// resize() 改变队列的大小
// assign() 赋值
// get_allocator() 返回队列的配置器
// max_size() 返回队列最大可以存储的元素数量
// shrink_to_fit() 将内存减少到等于当前元素数量所需的大小
// cbegin() 返回指向队列头部的常量迭代器
// cend() 返回指向队列尾部的常量迭代器
#include <iostream>
#include <deque>
int main()
{
std::deque<int> dq;
dq.push_back(1); // 在队列尾部插入元素
dq.push_front(2); // 在队列头部插入元素
std::cout << "Front: " << dq.front() << std::endl; // 访问队列头部元素
std::cout << "Back: " << dq.back() << std::endl; // 访问队列尾部元素
dq.pop_front(); // 删除队列头部元素
dq.pop_back(); // 删除队列尾部元素
std::cout << "Size: " << dq.size() << std::endl; // 队列的大小
return 0;
}
+20
View File
@@ -0,0 +1,20 @@
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m[] = {1, 2, 3, 4, 5, 6};
deque<int> d1;
deque<int> d2(m, m + 6);
deque<int>::iterator it = d2.begin();
while (it != d2.end())
{
cout << *it << " ";
it++;
}
cout << endl;
return 0;
}
+41
View File
@@ -0,0 +1,41 @@
#include <bits/stdc++.h>
using namespace std;
template <typename T>
void print(deque<T> &dq)
{
typename deque<T>::iterator it = dq.begin();
while (it != dq.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
int main()
{
int m[] = {1, 2, 3, 4, 5, 6};
deque<int> d1;
deque<int> d2(m, m + 6);
deque<int> d4 = d2; // 拷贝构造函数: deque(const deque &deq)
print(d4);
d1 = d2; // 赋值运算符: deque& operator=(const deque &deq)
print(d1);
print(d2);
deque<int> d3(10, 1); // 10 个 1
print(d3);
cout << "d5.swap(d2):" << endl;
deque<int> d5;
d5.swap(d2);
print(d5);
print(d2);
return 0;
}
+43
View File
@@ -0,0 +1,43 @@
#include <iostream>
#include <deque>
using namespace std;
class Person
{
friend void print(deque<Person> &dq);
private:
string name;
int age;
public:
Person(string name, int age) : name(name), age(age) {}
};
void print(deque<Person> &dq)
{
deque<Person>::iterator it = dq.begin();
while (it != dq.end())
{
cout << (*it).name << ", " << (*it).age << endl;
;
it++;
}
}
int main()
{
deque<Person> dq;
dq.push_front(Person("张三", 18));
dq.push_back(Person("李四", 19));
dq.push_front(Person("王五", 20));
print(dq);
cout << "--------" << endl;
dq.pop_back();
dq.pop_front();
print(dq);
return 0;
}
+22
View File
@@ -0,0 +1,22 @@
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<string> d1;
// d1.resize(5);
cout << "d1.size():" << d1.size() << ", d1.empty():" << d1.empty() << endl;
try
{
cout << d1[15] << endl;
}
catch (...)
{
cout << "错误" << endl;
}
return 0;
}
+18
View File
@@ -0,0 +1,18 @@
#include <bits/stdc++.h>
using namespace std;
int main()
{
deque<string> d1(5, "disen");
d1.push_front("jack");
d1.push_back("mack");
d1.insert(d1.begin() + 1, "lucy");
cout << "first element is: " << d1.front() << endl;
cout << "last element is: " << d1.back() << endl;
deque<string>::iterator it = d1.begin();
cout << "second element is: " << *(it + 1) << endl;
return 0;
}
+32
View File
@@ -0,0 +1,32 @@
// deque 的插入操作
#include <bits/stdc++.h>
using namespace std;
template <typename T>
void print(deque<T> &dq)
{
typename deque<T>::iterator it = dq.begin();
while (it != dq.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
int main()
{
deque<string> d1(5, "disen");
print(d1);
d1.insert(d1.begin() + 1, "jack");
print(d1);
string m[] = {"a", "b", "c", "d", "e"};
// 将 m 中的 bcd 插入到 d1 中的 第二个 disen 后面
d1.insert(d1.begin() + 3, m + 1, m + 4);
print(d1);
return 0;
}
+37
View File
@@ -0,0 +1,37 @@
// deque 的删除操作
#include <bits/stdc++.h>
using namespace std;
template <typename T>
void print(deque<T> &dq)
{
typename deque<T>::iterator it = dq.begin();
while (it != dq.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
int main()
{
string m[] = {"a", "b", "c", "d", "e"};
deque<string> dq(m, m + 5);
print(dq);
deque<string>::iterator del_it = dq.begin() + 1;
// for (int i = 0; i < 3; i++)
// {
// // dq.erase() 会删除当前元素并返回下一个元素的迭代器
// del_it = dq.erase(del_it);
// }
// 第二种删除方式
dq.erase(del_it, del_it + 3);
print(dq);
return 0;
}