【C++】List类学习

>

1.关于本文

文中描述的是一个学习List类过程中写的程序,程序中进行了以下步骤

1)创建list<string>

2)调用函数push_front和push_back添加元素

3)调用迭代器遍历list

4)调用函数front和back查找首尾结点

5)调用函数pop_front和pop_back删除元素

6)调用函数insert添加元素

7)调用函数erase和removed删除元素

8)调用函数sort对list进行排序

9)调用函数merge将两个list合并

10)调用函数reverse翻转list中全部元素

11)调用函数clear清空list中全部元素

2.程序代码

下面的代码是在VC++6.0中编译的

#include <iostream>
#include <cstdlib>
#include <string>
#include <list>

using namespace std;

int main()
{
    // 创建list
    string temp[] = {"Tsybius", "Galatea"};
    list<string> namelist (temp, temp + sizeof(temp)/sizeof(string));

    // 添加元素
    cout << "Push from front and back" << endl;
    namelist.push_front("Quintus");
    namelist.push_back("Titus");
    cout << endl;

    // 遍历list
    cout << "Traverse List" << endl;
    list<string> :: iterator iter;
    for(iter = namelist.begin(); iter != namelist.end(); iter++)
    {
        cout << *iter << ‘ ‘;
    }
    cout << endl << endl;

    // 首尾结点
    cout << "Front & Back" << endl;
    cout << "front: " << namelist.front() << endl;
    cout << "back: " << namelist.back() << endl;
    cout << endl;

    // 删除元素
    cout << "Delete from Front and Back" << endl;
    namelist.pop_front();
    namelist.pop_back();
    cout << endl;

    // 遍历list
    cout << "Traverse List" << endl;
    for(iter = namelist.begin(); iter != namelist.end(); iter++)
    {
        cout << *iter << ‘ ‘;
    }
    cout << endl << endl;

    // 插入元素
    cout << "Insert Data" << endl;
    namelist.insert(namelist.begin(), "Julius");
    iter = namelist.begin();
    iter++;iter++;  //注意:不能写成iter+=2,相关运算符没有重载
    namelist.insert(iter, "Marcus");
    cout << endl;

    // 遍历list
    cout << "Traverse List" << endl;
    for(iter = namelist.begin(); iter != namelist.end(); iter++)
    {
        cout << *iter << ‘ ‘;
    }
    cout << endl << endl;

    // 删除数据
    cout << "Erase Data" << endl;
    iter = namelist.begin();
    advance(iter, 3);
    namelist.erase(iter); //方法1
    namelist.remove("Julius"); //方法2
    cout << endl;

    // 遍历list
    cout << "Traverse List" << endl;
    for(iter = namelist.begin(); iter != namelist.end(); iter++)
    {
        cout << *iter << ‘ ‘;
    }
    cout << endl << endl;

    // 排序List(自小到大,sort中可以添加返回布尔值的函数,作为比较依据)
    namelist.sort();

    // 遍历list
    cout << "Traverse List" << endl;
    for(iter = namelist.begin(); iter != namelist.end(); iter++)
    {
        cout << *iter << ‘ ‘;
    }
    cout << endl << endl;

    // 与另一个list合并
    cout << "Merge Two Lists" << endl;
    string temp2[] = {"Licinius", "Cicero"};
    list<string> namelist2 (temp2, temp2 + sizeof(temp2)/sizeof(string));
    namelist.merge(namelist2);
    cout << endl;

    // 遍历list
    cout << "Traverse List" << endl;
    for(iter = namelist.begin(); iter != namelist.end(); iter++)
    {
        cout << *iter << ‘ ‘;
    }
    cout << endl << endl;

    // 翻转list
    cout << "Reverse List" << endl;
    namelist.reverse();
    cout << endl;

    // 遍历list
    cout << "Traverse List" << endl;
    for(iter = namelist.begin(); iter != namelist.end(); iter++)
    {
        cout << *iter << ‘ ‘;
    }
    cout << endl << endl;

    // 清空List
    cout << "Size: " << namelist.size() << endl;
    cout << "IsEmpty? " << namelist.empty() << endl;
    namelist.clear();
    cout << "Size: " << namelist.size() << endl;
    cout << "IsEmpty? " << namelist.empty() << endl;

    system("pause");
    return 0;
}

4.运行结果

END

【C++】List类学习

时间: 2024-10-10 14:07:01

【C++】List类学习的相关文章

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

【C++】Stack类与Queue类学习

1.Stack类学习 1)建立stack<string> 2)调用push函数将数据压入栈中 3)调用size函数查看当前栈内元素数量 4)调用empty函数检测栈是否为空 5)如果不为空则不断调用pop函数将元素从栈中取出(后入先出) #include <iostream> #include <stack> using namespace std; int main() {     stack<string> stkNameList;     stkNam

Spreadsheet_Excel_Reader类学习心得

一:Spreadsheet_Excel_Reader类的基本使用方法: $reader=new Spreadsheet_Excel_Reader(); $reader->setOutputEncoding("GBK"); $reader->read($fileName); $rows=$reader->sheets[2]['numRows']; $cells=$reader->sheets[2]['cells']; 二:经常使用到的一些基本函数: 1> 

Apache commons lang工具类学习笔记(2)--StringUtils

StringUtils工具类具有对String具有简单而强大的处理能力,从检查空串到分割字符串,到生成格式化的字符串,使用都很方便简洁,能减少很多代码量; 详细的使用方法可以参考下面的例子或者官方的API(http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isAlpha(java.lang.CharSequence)) packa

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

Collection类学习笔记

binarySearch原理: public static index halfSearch(List<String> list, String key) { int max,min,mid; max = list.size()-1; min = 0; while(min<=max) { mid = (max+min) >>1; String str = list.get(mid); int num = str.compareTo(key); if(num > 0) m

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int

Date类学习总结

Date类学习总结 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); //year 为 int  time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0            int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 注:在使用s