C++中list的使用方法及常用list操作总结

C++中list的使用方法及常用list操作总结

一、List定义:

List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。使用时需要添加头文件
#include <list>

二、List定义和初始化:

list<int>lst1;          //创建空list
    list<int> lst2(5);       //创建含有5个元素的list
    list<int>lst3(3,2);  //创建含有3个元素的list
    list<int>lst4(lst2);    //使用lst2初始化lst4
    list<int>lst5(lst2.begin(),lst2.end());  //同lst4

三、List常用操作函数:

Lst1.assign() 给list赋值
Lst1.back() 返回最后一个元素
Lst1.begin() 返回指向第一个元素的迭代器
Lst1.clear() 删除所有元素
Lst1.empty() 如果list是空的则返回true
Lst1.end() 返回末尾的迭代器
Lst1.erase() 删除一个元素
Lst1.front() 返回第一个元素
Lst1.get_allocator() 返回list的配置器
Lst1.insert() 插入一个元素到list中
Lst1.max_size() 返回list能容纳的最大元素数量
Lst1.merge() 合并两个list
Lst1.pop_back() 删除最后一个元素
Lst1.pop_front() 删除第一个元素
Lst1.push_back() 在list的末尾添加一个元素
Lst1.push_front() 在list的头部添加一个元素
Lst1.rbegin() 返回指向第一个元素的逆向迭代器
Lst1.remove() 从list删除元素
Lst1.remove_if() 按指定条件删除元素
Lst1.rend() 指向list末尾的逆向迭代器
Lst1.resize() 改变list的大小
Lst1.reverse() 把list的元素倒转
Lst1.size() 返回list中的元素个数
Lst1.sort() 给list排序
Lst1.splice() 合并两个list
Lst1.swap() 交换两个list
Lst1.unique() 删除list中重复的元素

四、List使用示例:

示例1:遍历List

//迭代器法

for(list<int>::const_iteratoriter = lst1.begin();iter != lst1.end();iter++)
 {
  cout<<*iter;
 }
 cout<<endl;

示例2:

#include <iostream>
#include <list>
#include <numeric>
#include <algorithm>
#include <windows.h>
using namespace std; 

typedef list<int> LISTINT;
typedef list<int> LISTCHAR; 

void main()
{
  //用LISTINT创建一个list对象
  LISTINT listOne;
  //声明i为迭代器
  LISTINT::iterator i; 

  listOne.push_front(3);
  listOne.push_front(2);
  listOne.push_front(1); 

  listOne.push_back(4);
  listOne.push_back(5);
  listOne.push_back(6); 

  cout << "listOne.begin()--- listOne.end():" << endl;
  for (i = listOne.begin(); i != listOne.end(); ++i)
    cout << *i << " ";
  cout << endl; 

  LISTINT::reverse_iterator ir;
  cout << "listOne.rbegin()---listOne.rend():" << endl;
  for (ir = listOne.rbegin(); ir != listOne.rend(); ir++) {
    cout << *ir << " ";
  }
  cout << endl; 

  int result = accumulate(listOne.begin(), listOne.end(), 0);
  cout << "Sum=" << result << endl;
  cout << "------------------" << endl; 

  //用LISTCHAR创建一个list对象
  LISTCHAR listTwo;
  //声明i为迭代器
  LISTCHAR::iterator j; 

  listTwo.push_front('C');
  listTwo.push_front('B');
  listTwo.push_front('A'); 

  listTwo.push_back('D');
  listTwo.push_back('E');
  listTwo.push_back('F'); 

  cout << "listTwo.begin()---listTwo.end():" << endl;
  for (j = listTwo.begin(); j != listTwo.end(); ++j)
    cout << char(*j) << " ";
  cout << endl; 

  j = max_element(listTwo.begin(), listTwo.end());
  cout << "The maximum element in listTwo is: " << char(*j) << endl;
  Sleep(10000);
}

#include <iostream>
#include <list>
#include <windows.h> 

using namespace std;
typedef list<int> INTLIST; 

//从前向后显示list队列的全部元素
void put_list(INTLIST list, char *name)
{
  INTLIST::iterator plist; 

  cout << "The contents of " << name << " : ";
  for (plist = list.begin(); plist != list.end(); plist++)
    cout << *plist << " ";
  cout << endl;
} 

//测试list容器的功能
void main(void)
{
  //list1对象初始为空
  INTLIST list1;
  INTLIST list2(5, 1);
  INTLIST list3(list2.begin(), --list2.end()); 

  //声明一个名为i的双向迭代器
  INTLIST::iterator i; 

  put_list(list1, "list1");
  put_list(list2, "list2");
  put_list(list3, "list3"); 

  list1.push_back(7);
  list1.push_back(8);
  cout << "list1.push_back(7) and list1.push_back(8):" << endl;
  put_list(list1, "list1"); 

  list1.push_front(6);
  list1.push_front(5);
  cout << "list1.push_front(6) and list1.push_front(5):" << endl;
  put_list(list1, "list1"); 

  list1.insert(++list1.begin(), 3, 9);
  cout << "list1.insert(list1.begin()+1,3,9):" << endl;
  put_list(list1, "list1"); 

  //测试引用类函数
  cout << "list1.front()=" << list1.front() << endl;
  cout << "list1.back()=" << list1.back() << endl; 

  list1.pop_front();
  list1.pop_back();
  cout << "list1.pop_front() and list1.pop_back():" << endl;
  put_list(list1, "list1"); 

  list1.erase(++list1.begin());
  cout << "list1.erase(++list1.begin()):" << endl;
  put_list(list1, "list1"); 

  list2.assign(8, 1);
  cout << "list2.assign(8,1):" << endl;
  put_list(list2, "list2"); 

  cout << "list1.max_size(): " << list1.max_size() << endl;
  cout << "list1.size(): " << list1.size() << endl;
  cout << "list1.empty(): " << list1.empty() << endl; 

  put_list(list1, "list1");
  put_list(list3, "list3");
  cout << "list1>list3: " << (list1 > list3) << endl;
  cout << "list1<list3: " << (list1 < list3) << endl; 

  list1.sort();
  put_list(list1, "list1"); 

  list1.splice(++list1.begin(), list3);
  put_list(list1, "list1");
  put_list(list3, "list3");
  Sleep(10000);
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • C++ STL入门教程(2) list双向链表使用方法(附程序代码)

    一.简介 "Unlike other standard sequence containers, list and forward_list objects are specifically designed to be efficient inserting and removing elements in any position, even in the middle of the sequence." Lists将元素按顺序储存在链表中.与向量(vector)相比, 它允许快速

  • C++ 模拟实现list(迭代器)实现代码

    C++ 模拟实现list(迭代器) 实现代码: #pragma once; #include <assert.h> #include<iostream> #include <assert.h> using namespace std; template<class T> struct __ListNode { T _data; __ListNode<T>* _next; __ListNode<T>* _prev; __ListNode

  • C++中CSimpleList的实现与测试实例

    本文实例讲述了C++简单列表类的实现方法.分享给大家供大家参考.具体方法如下: _AFXTLS.CPP文件如下: //#include "StdAfx.h #include <stddef.h> #include <stdio.h> #include "_AFXTLS_.H" struct MyThreadData{ MyThreadData* pNext; int nShortData; }; void CSimpleList::AddHead(vo

  • C++ 中CListCtrl的每个项都显示不同的提示信息

    C++ 中CListCtrl的每个项都显示不同的提示信息 添加CToolTipCtrl成员变量m_toolTipCtrl,CListCtrl成员变量m_ListUser,CImageList成员变量m_imageList(这个可以不要) 在OnInitDialog()函数里加下面代码 m_BoradcastEnd.EnableWindow(FALSE); m_imageList.Create(32, 32, ILC_COLOR8, 2, 2); DWORD dwStyle = m_ListUse

  • C++语言 STL容器list总结

    在使用std::list<>链表时,难免会对数据进行添加删除操作.而遍历链表则有两种方式:通过索引访问,象数组一样处理:通过std::list<>::iterator链表遍历器进行访问 STL 中的list 就是一 双向链表,可高效地进行插入删除元素. list不支持随机访问.所以没有 at(pos)和operator[]. list 对象list1, list2 分别有元素list1(1,2,3),list2(4,5,6) .list< int>::iterator

  • C++ 使用模板实现一个List的实例

    C ++使用模板写的一个List template<class T> class List { private: struct Node { T data; Node *next; }; //head Node *head; //size int length; //process Node *p; //temp Node *q; public: List() { head = NULL; length = 0; p = NULL; } void add(T t) { if(head == N

  • C++中 STL list详解及简单实例

    C++中 STL list详解 1.List: 内部实现是一个双向链表,可以高效的进行插入删除,但不能够进行随机访问 2..示例程序: #include "stdafx.h" #include <iostream> #include <list> #include <iterator> #include <algorithm> using namespace std; const int num[5] = {1,3,2,4,5}; boo

  • C++ list的实例详解

     C++ list的实例详解 Source: #include <iostream> #include <list> #include <numeric> #include <algorithm> using namespace std; typedef list<int> LISTINT; //创建一个list容器的实例LISTINT typedef list<int> LISTCHAR; //创建一个list容器的实例LISTCH

  • C++中list的使用方法及常用list操作总结

    C++中list的使用方法及常用list操作总结 一.List定义: List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.使用时需要添加头文件 #include <list> 二.List定义和初始化: list<int>lst1;          //创建空list     list<int> lst2(5);       //创建含有5个元素的list     list<int>lst3(3,2

  • 在IDEA中 实现给main方法附带参数的操作

    一. 测试代码: 二.添加参数 1.在终端工具中 ①先编译: javac Test.java ②再运行: java Test args1 args2 args3 注:参数之前用空格隔开 如下图所示: 2.在idea中添加参数 ①点击Run下的Edit Configurations ②配置Configuration页中的Program arguments选项,就可以在idea中传入参数,参数之间用空格隔开. 如下图所示: 补充:IDEA中运行JavaSE程序向main函数传递参数 在实现JAVA核

  • Java中Thread类详解及常用的方法

    目录 一.Thread 的常见构造方法 二.Thread 的常见属性 三.创建线程 四.中断线程 五.线程等待 六.获取线程引用 七.线程休眠 八.线程状态 总结 一.Thread 的常见构造方法 方法 说明 Thread() 创建线程对象 Thread(Runnable target) 使用 Runnable 对象创建线程对象 Thread(String name) 创建线程对象并命名 Thread(Runnable target,String name) 使用 Runnable 对象创建线程

  • Pandas中Series的属性,方法,常用操作使用案例

    目录 1. Series 对象的创建 1.1 创建一个空的 Series 对象 1.2 通过列表创建一个 Series 对象 1.3 通过元组创建一个 Series 对象 1.4 通过字典创建一个 Series 对象 1.5 通过 ndarray 创建一个 Series 对象 1.6 创建 Series 对象时指定索引 1.7 通过一个标量(数)创建一个 Series 对象 2. Series 的属性 2.1 values ---- 返回一个 ndarray 数组 2.2 index ----

  • js正则表达式中test,exec,match方法的区别说明

    js正则表达式中test,exec,match方法的区别说明 test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var reg = new RegExp("1.", "");alert(reg.test(str)); // true exec exec 查找并返回当前的匹配结果,并以数组的形式返回.var str = "1a1b1c";var reg = new R

  • ES6中的数组扩展方法

    form 转化为真正的数组 先说一下使用场景,在Js中,我们要经常操作DOM,比如获取全部页面的input标签,并且找到类型为button的元素,然后给这个按钮注册一个点击事件,我们可能会这样操作: var inputObjs=document.getElementsByTagName('input'); for(var i=0;i<inputObjs.length;i++){ if(inputObjs[i].type==='button'){ inputObjs[i].onclick=func

  • java 中enum的使用方法详解

    java 中enum的使用方法详解 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 public interface IConstants { String MON = "Mon"; String TUE = "Tue"; String WED = "Wed"; String THU = "Thu

  • Javascript中八种遍历方法的执行速度深度对比

    前言 遍历数组或对象是一名程序员的基本素养之一. 然而遍历却不是一件简单的事, 优秀的程序员知道怎么去选择合适的遍历方法, 优化遍历效率. 本篇将带你走进JavaScript遍历的世界, 享受分析JS循环的快感. 本篇所有代码都可以直接运行, 希望您通读本篇后, 不止是浏览, 最好是亲手去实践下. 概述 js有如下两种数据需要经常遍历 数组(Array) 对象(Object) 同时又提供了如下8种方法方便我们遍历元素 for while(或do~while) forEach for in $.e

  • 关于JavaScript中事件绑定的方法总结

    最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScript代码中直接绑定 3 绑定事件监听函数 一.在DOM元素中直接绑定 也就是直接在html标签中通过 onXXX="" 来绑定.举个例子: <input type="button" value="点我呦" onclick="aler

  • JavaScript ES5标准中新增的Array方法

    ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块,我们可能就不需要去有板有眼地for循环了. ES5中新增了写数组方法,如下: forEach (js v1.6) map (js v1.6) filter (js v1.6) some (js v1.6) every (js v1.6) indexOf (js v1.6) lastIndexOf (js v1.6) reduce (js v1.8) reduceRight (js v1.8) 1.js中常用的数

随机推荐