算法与竞赛(第5章) - c++与stl基础一
时间: 2023-04-24 16:05:41 浏览: 428
本章主要介绍了算法与竞赛中常用的C++语言和STL库的基础知识。其中,C++语言的基础包括数据类型、运算符、控制结构、函数、数组、指针、引用、结构体、类等;STL库的基础包括容器、迭代器、算法、函数对象等。这些基础知识对于算法竞赛的学习和实践都非常重要,能够帮助我们更好地理解和实现算法。
相关问题
c++算法竞赛常用的库函数
### C++ 算法竞赛常用的标准库函数 `list`
`std::list` 是 C++ STL 中的一种双向链表容器,允许高效的插入和删除操作。对于算法竞赛而言,理解如何高效利用 `std::list` 可以帮助解决涉及频繁增删节点的问题。
#### 创建列表
创建一个空的 `std::list<int>` 并初始化:
```cpp
#include <iostream>
#include <list>
int main() {
std::list<int> myList;
// 初始化列表
myList = {1, 2, 3};
}
```
#### 插入元素
向列表中插入新元素可以使用成员函数 `push_back()` 或者 `insert()` 方法来实现更灵活的位置控制:
```cpp
// 向列表尾部添加元素
myList.push_back(4);
// 在指定位置前插入元素
auto it = myList.begin();
advance(it, 1); // 移动迭代器到第二个位置之前
myList.insert(it, 5);
```
#### 删除元素
移除特定位置上的元素可以通过调用 `erase()` 成员函数完成;而要清除整个列表,则应采用 `clear()` 函数:
```cpp
// 删除第一个遇到的值为3的元素
it = find(myList.begin(), myList.end(), 3);
if (it != myList.end()) {
myList.erase(it);
}
// 清空列表中的所有元素
myList.clear();
```
#### 遍历列表
遍历 `std::list` 的方式有两种:一种是通过范围for循环,另一种则是借助于迭代器来进行访问:
```cpp
// 范围for循环打印列表内容
for(const auto& elem : myList){
std::cout << elem << ' ';
}
// 迭代器遍历并修改元素
for(auto iter=myList.begin();iter!=myList.end();++iter){
*iter *= 2; // 将每个元素乘以2
}
```
#### 排序与反转
虽然 `std::list` 不支持随机存取特性,但是仍然能够对其进行排序以及反向排列:
```cpp
// 对列表进行排序
myList.sort();
// 如果想要自定义比较规则,比如按绝对值大小降序排列
bool cmp(int a,int b){return abs(a)>abs(b);}
myList.sort(cmp);
// 反转列表顺序
myList.reverse();
```
上述功能展示了 `std::list` 在处理动态数据结构方面的灵活性及其丰富的接口设计[^3]。
阅读全文
相关推荐















