机试必备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.
考研机试常用的数据结构 文章被收录于专栏
考研机试常用的数据结构