std::list<std::pair<uint64_t, uint64_t> > mFreeBufferList; std::list<std::pair<uint64_t, uint64_t> > mBusyBufferList;
时间: 2025-03-07 11:13:20 浏览: 30
### C++ 中 `std::list` 存储 `std::pair<uint64_t, uint64_t>` 的使用方法
#### 定义和初始化列表
为了创建并初始化一个包含 `std::pair<uint64_t, uint64_t>` 类型元素的链表,可以按照如下方式操作:
```cpp
#include <iostream>
#include <list>
#include <utility> // For std::pair
#include <cstdint> // For uint64_t
int main() {
// 创建一个存储 pair<uint64_t, uint64_t> 的 list 并初始化一些数据
std::list<std::pair<uint64_t, uint64_t>> myList = {
{1ULL, 2ULL},
{3ULL, 4ULL}
};
// 输出初始内容
for (const auto& elem : myList) {
std::cout << "(" << elem.first << ", " << elem.second << ") ";
}
}
```
这段代码展示了如何声明带有特定类型的 `std::list` 和通过大括号语法来填充初始值[^1]。
#### 插入新元素到列表中
向已有的 `std::list` 添加新的 `std::pair<uint64_t, uint64_t>` 可以利用成员函数如 `push_back()` 或者 `emplace_back()` 方法来进行:
```cpp
// 使用 push_back()
myList.push_back(std::make_pair(5ULL, 6ULL));
// 或者更高效地使用 emplace_back(), 避免不必要的临时对象构建
myList.emplace_back(7ULL, 8ULL);
```
这里介绍了两种不同的插入技术;前者适用于已有现成的对象实例时,而后者则是在不需要额外构造中间变量的情况下直接在容器内部位置上构造对象。
#### 访问与遍历列表中的元素
访问或迭代整个 `std::list` 来处理其内的每一对数值可以通过范围for循环轻松实现:
```cpp
for (auto it = myList.begin(); it != myList.end(); ++it){
std::cout << "(first=" << (*it).first << ", second=" << (*it).second << ")" << '\n';
}
// 更简洁的方式是使用基于范围的 for 循环
for(const auto &item : myList){
std::cout << "(first=" << item.first << ", second=" << item.second << ")\n";
}
```
上述片段说明了两种不同风格的迭代器应用以及更加现代化且易于阅读的形式——基于范围的for语句。
#### 删除指定条件下的元素
如果想要移除满足一定条件(比如第一个整数大于某个阈值)的所有项,则可采用算法库里的 remove_if 函数配合 lambda 表达式完成此任务:
```cpp
uint64_t threshold = 4;
myList.remove_if([threshold](const std::pair<uint64_t,uint64_t>& p){return p.first > threshold;});
```
这行命令会删除所有首个组件超过给定界限 `threshold` 的配对。
阅读全文
相关推荐



















