list的用法
附List用法实例: #include <iostream> #include <list> #include <numeric> #include <algorithm> using namespace std; //创建一个list容器的实例LISTINT typedef list<int> LISTINT; //创建一个list容器的实例LISTCHAR typedef list<char> LISTCHAR; void main(void) { //-------------------------- //用list容器处理整型数据 //-------------------------- //用LISTINT创建一个名为listOne的list对象 LISTINT listOne; //声明i为迭代器 LISTINT::iterator i; //从前面向listOne容器中添加数据 listOne.push_front (2); listOne.push_front (1); //从后面向listOne容器中添加数据 listOne.push_back (3); listOne.push_back (4); //从前向后显示listOne中的数据 cout<<"listOne.begin()--- listOne.end():"<<endl; for (i = listOne.begin(); i != listOne.end(); ++i) cout << *i << " "; cout << endl; //输出为 1 2 3 4 //从后向后显示listOne中的数据 LISTINT::reverse_iterator ir; cout<<"listOne.rbegin()---listOne.rend():"<<endl; for (ir =listOne.rbegin(); ir!=listOne.rend();ir++) { cout << *ir << " "; } cout << endl; //输出为 4 3 2 1 //使用STL的accumulate(累加)算法 int result = accumulate(listOne.begin(), listOne.end(),0); cout<<"Sum="<<result<<endl; cout<<"------------------"<<endl; //输出为 Sum=10 //-------------------------- //用list容器处理字符型数据 //-------------------------- //用LISTCHAR创建一个名为listOne的list对象 LISTCHAR listTwo; //声明i为迭代器 LISTCHAR::iterator j; //从前面向listTwo容器中添加数据 listTwo.push_front ('A'); listTwo.push_front ('B'); //从后面向listTwo容器中添加数据 listTwo.push_back ('x'); listTwo.push_back ('y'); //从前向后显示listTwo中的数据 cout<<"listTwo.begin()---listTwo.end():"<<endl; for (j = listTwo.begin(); j != listTwo.end(); ++j) cout << char(*j) << " "; cout << endl; //输出为 B A x y //使用STL的max_element算法求listTwo中的最大元素并显示 j=max_element(listTwo.begin(),listTwo.end()); cout << "The maximum element in listTwo is: "<<char(*j)<<endl; } //输出为: The maximum element in listTwo is: y ### List的用法详解 #### 一、List简介 在C++标准模板库(STL)中,`list`是一种非常实用的容器类型,它基于双向链表实现。相比于其他容器如`vector`或`deque`,`list`在进行元素的插入和删除操作时更加高效,因为这些操作不会引起大量元素的移动。但同时,由于链表结构的特性,`list`并不支持随机访问,这意味着对其中元素的访问必须通过迭代器进行。 #### 二、List基本操作 ##### 1. 创建列表 ```cpp #include <list> #include <iostream> using namespace std; int main() { list<int> my_list; // 创建一个空的list对象 return 0; } ``` ##### 2. 插入元素 ```cpp my_list.push_front(5); // 在头部插入元素 my_list.push_back(10); // 在尾部插入元素 ``` ##### 3. 访问元素 ```cpp cout << "First element: " << my_list.front() << endl; cout << "Last element: " << my_list.back() << endl; ``` ##### 4. 遍历列表 ```cpp list<int>::iterator it; for (it = my_list.begin(); it != my_list.end(); ++it) { cout << *it << " "; } ``` ##### 5. 反向遍历 ```cpp list<int>::reverse_iterator rit; for (rit = my_list.rbegin(); rit != my_list.rend(); ++rit) { cout << *rit << " "; } ``` ##### 6. 使用STL算法 ```cpp int sum = accumulate(my_list.begin(), my_list.end(), 0); cout << "Sum: " << sum << endl; ``` ##### 7. 其他常用操作 - `clear()`:清空列表 - `empty()`:判断列表是否为空 - `size()`:获取列表当前元素的数量 - `erase()`:删除指定位置的元素 - `sort()`:对列表进行排序 - `remove()`:移除列表中特定值的所有元素 - `splice()`:合并两个列表 - `merge()`:合并两个已排序的列表 - `reverse()`:反转列表中的元素 - `unique()`:移除连续重复的元素 #### 三、示例代码解析 下面是对题目中提供的示例代码的详细分析: ```cpp #include <iostream> #include <list> #include <numeric> #include <algorithm> using namespace std; // 定义list容器的别名 typedef list<int> LISTINT; typedef list<char> LISTCHAR; int main() { // 整型数据处理 LISTINT listOne; LISTINT::iterator i; // 向listOne中添加数据 listOne.push_front(2); listOne.push_front(1); listOne.push_back(3); listOne.push_back(4); // 正向遍历输出listOne cout << "listOne.begin()---listOne.end():" << endl; for (i = listOne.begin(); i != listOne.end(); ++i) { cout << *i << " "; } cout << endl; // 反向遍历输出listOne LISTINT::reverse_iterator ir; cout << "listOne.rbegin()---listOne.rend():" << endl; for (ir = listOne.rbegin(); ir != listOne.rend(); ++ir) { cout << *ir << " "; } cout << endl; // 使用accumulate算法计算总和 int result = accumulate(listOne.begin(), listOne.end(), 0); cout << "Sum=" << result << endl; // 字符型数据处理 LISTCHAR listTwo; LISTCHAR::iterator j; // 向listTwo中添加数据 listTwo.push_front('A'); listTwo.push_front('B'); listTwo.push_back('x'); listTwo.push_back('y'); // 正向遍历输出listTwo cout << "listTwo.begin()---listTwo.end():" << endl; for (j = listTwo.begin(); j != listTwo.end(); ++j) { cout << char(*j) << " "; } cout << endl; // 使用max_element算法找到最大元素 j = max_element(listTwo.begin(), listTwo.end()); cout << "The maximum element in listTwo is: " << char(*j) << endl; return 0; } ``` 此示例代码展示了如何使用`list`容器来存储和操作整型及字符型数据。通过对这些代码的理解和学习,可以更好地掌握`list`容器的基本使用方法及其与其他STL算法的结合应用。