机试必备list用法
在 C++ 中,std::list 是标准模板库(STL)提供的一种容器,它实现了双向链表的数据结构。
基本定义
要使用 std::list,需要包含 <list> 头文件。std::list 是一个模板类,其定义如下:
#include <list> // ... std::list<数据类型> 变量名;
这里的“数据类型”可以是任何有效的 C++ 数据类型,例如 int、double、std::string 等,“变量名”是你为这个 list 对象起的名字。
示例代码:定义不同类型的 std::list
#include <iostream>
#include <list>
#include <string>
int main() {
// 定义一个存储 int 类型元素的 list
std::list<int> intList;
// 定义一个存储 double 类型元素的 list,并初始化一些元素
std::list<double> doubleList = {1.1, 2.2, 3.3};
// 定义一个存储 std::string 类型元素的 list
std::list<std::string> stringList;
return 0;
}
常见用法
1. 添加元素
push_back():在链表的尾部添加一个元素。push_front():在链表的头部添加一个元素。insert():在指定位置插入一个或多个元素。
#include <iostream>
#include <list>
int main() {
std::list<int> myList;
// 在尾部添加元素
myList.push_back(1);
myList.push_back(2);
// 在头部添加元素
myList.push_front(0);
// 在指定位置插入元素
auto it = myList.begin();
++it; // 移动到第二个位置
myList.insert(it, 10);
// 输出 list 中的元素
for (int num : myList) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
2. 删除元素
pop_back():删除链表的最后一个元素。pop_front():删除链表的第一个元素。erase():删除指定位置或指定范围的元素。remove():删除所有值等于指定值的元素。
#include <iostream>
#include <list>
int main() {
std::list<int> myList = {1, 2, 3, 2, 4};
// 删除最后一个元素
myList.pop_back();
// 删除第一个元素
myList.pop_front();
// 删除指定位置的元素
auto it = myList.begin();
++it; // 移动到第二个位置
myList.erase(it);
// 删除所有值为 2 的元素
myList.remove(2);
// 输出 list 中的元素
for (int num : myList) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
3. 遍历元素
可以使用迭代器或范围 for 循环来遍历 std::list 中的元素。
#include <iostream>
#include <list>
int main() {
std::list<int> myList = {1, 2, 3, 4, 5};
// 使用迭代器遍历
for (auto it = myList.begin(); it != myList.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 使用范围 for 循环遍历
for (int num : myList) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
4. 获取元素数量
使用 size() 方法可以获取 std::list 中元素的数量。
#include <iostream>
#include <list>
int main() {
std::list<int> myList = {1, 2, 3, 4, 5};
std::cout << "Size of the list: " << myList.size() << std::endl;
return 0;
}
5. 检查是否为空
使用 empty() 方法可以检查 std::list 是否为空。
#include <iostream>
#include <list>
int main() {
std::list<int> myList;
if (myList.empty()) {
std::cout << "The list is empty." << std::endl;
}
return 0;
}
std::list 的特点
- 双向链表结构:
std::list是基于双向链表实现的,这意味着它支持在常数时间内进行插入和删除操作(在已知位置的情况下),但随机访问的效率较低(需要从头或尾开始遍历链表)。 - 动态大小:
std::list的大小可以动态变化,你可以根据需要添加或删除元素。
std::list 适用于需要频繁进行插入和删除操作,而对随机访问需求较少的场景。随机访问可用vector.
考研机试常用的数据结构 文章被收录于专栏
考研机试常用的数据结构