前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++那些事儿11.0 STL--List

c++那些事儿11.0 STL--List

作者头像
热心的社会主义接班人
发布2018-04-27 13:26:55
5180
发布2018-04-27 13:26:55
举报
文章被收录于专栏:cscs

首先对STL不熟悉的同学,可以先看看这篇文章里有些东西:


STL中容器相关知识点

知识点综述:


List:序列式容器,双向链表,在内存中不连续存放。

优点: 插入,删除元素效率高。

STL的基本知识点:

1.0 容器:容纳各种数据类型的通用数据结构,是类模板。 2.0 迭代器:可以依次存取容器的元素,类似指针。 3.0 算法用来操作容器中元素的函数模板。


list数据结构:

list.PNG

list相关函数:

list相关函数.PNG

相关代码:


代码语言:javascript
复制
#include<iostream>
#include<list>
#include<string>
#include<cstdlib>
#include <algorithm> 
#include<ctime>
#include<fstream>

using namespace std;
// void displayfor(list<int> li);
void displayiterator(list<int> li);
void displayforeach(list<int> li);
void randList(list<int> &li);
void writeFile(list<int> li);
int main() 
{  
    //创建vector对象。
    list<int> li; //容器为空。

                     //bool empty() 判断容器是否为空(返回true时为空)
    cout << "li 是否为空:" <<li.empty() << endl;

    //void push_back()在容器对象末尾添加新元素
    li.push_back(16); //添加元素
    li.push_back(18);
    li.push_back(19);

    //int size() 返回容器的大小(元素的数目)
    int size = li.size();
    cout << "容器的大小:" << size << endl;

    displayforeach(li);
    cout << endl << "---------------------" << endl;

    //void pop_back() 删除容器对象末尾的元素
    cout << "删除容器对象末尾的元素." << endl;
    li.pop_back();
    displayiterator(li); //迭代器遍历
    cout << endl << "---------------------" << endl;


    /*void insert() 在容器对象末尾插入一个或多个元素
    iterator insert(iterator loc, const TYPE &val);
    void insert(iterator loc, size_type num, const TYPE &val);
    void insert(iterator loc, input_iterator start, input_iterator end);
    insert() 函数有以下三种用法:
    在指定位置loc前插入值为val的元素, 返回指向这个元素的迭代器,
    在指定位置loc前插入num个值为val的元素
    在指定位置loc前插入区间[start, end)的所有元素 .
    */
    list<int>::iterator iter1 = li.end();
    list<int>::iterator iter2 = li.begin();
    li.insert(iter1, 22);
    li.insert(iter2, 33);
    cout << "头部和尾部分部追加一个元素" << endl;
    displayforeach(li);  //foreach遍历
    cout << endl << "---------------------" << endl;


    // int max_size() 
    cout << "容器的最大的容量:" << li.max_size() << endl;

    list<int> li1(6, 8);
    cout << "li的元素:";
    displayforeach(li1);

    // void swap()  交换两个容器的对象
    cout << endl << "---------------------" << endl;
    li.swap(li1);
    cout << "交换li和li1 " << "li的元素:";
    displayiterator(li);
    cout << endl;
/*
    //int reserve(int n)  设置容器最小的元素容纳数量
    li.reserve(9);
    cout << endl << "容器的最大的容量:" << vec.capacity() << endl;
    cout << "容器的大小:" << vec.size() << endl;
*/

//void clear() 删除容器对象的所有元素。
    li.clear();
    cout << " 删除容器vec对象的所有元素" << " vec的元素:";
    displayforeach(li);
    cout << endl << "---------------------" << endl;



        //void clear() 删除容器对象的所有元素。
        li.clear();
    cout << " 删除容器vec对象的所有元素" << " vec的元素:";
    displayforeach(li);
    cout << endl << "---------------------" << endl;

    randList(li);  //随机生产数字放入 list中。
    cout << endl;
    list<int> li2;

    /*list特有的函数
    void assign( input_iterator start, input_iterator end );
    void assign( size_type num, const TYPE &val );
    assign()函数以迭代器start和end指示的范围为list赋值
    或者为list赋值num个以val为值的元素。s


    */
    li2.assign(li.begin(), li.end());
    cout << "li的元素:";
    displayforeach(li);
    cout << endl;
    cout << "li2中的元素:";
    displayiterator(li2);

//back() 返回最后一个元素 
//front() 返回第一个元素 
    cout << endl;
    cout << "li最后一个元素:" << li.back() << endl;
    cout<< "li第一个元素:" << li.front() << endl;
    cout << "---------------------" << endl;

/*
iterator erase( iterator pos );
iterator erase( iterator start, iterator end );
*/
    cout << "删除第2个元素:" << endl;
    list<int>::iterator lit = li.begin();
    lit++;
    li.erase(lit);
    cout << "li的元素:";
    displayforeach(li);
    cout << endl;

//  void reverse();
//  reverse()函数把list所有元素倒转。
    cout << "li的元素倒置:" << endl;;
    li.reverse();
    cout << "li的元素:";
    displayforeach(li);
    cout << endl;

/* void sort();
  void sort(Comp compfunction);
sort()函数为链表排序,默认是升序。如果指定compfunction的话,
    就采用指定函数来判定两个元素的大小。
*/
    li.sort();
    cout << "li升序排列:";
    displayforeach(li);
    cout << endl;

/*

void splice( iterator pos, list &lst );
void splice( iterator pos, list &lst, iterator del );
void splice( iterator pos, list &lst, iterator start, iterator end );
splice()函数把lst连接到pos的位置。如果指定其他参数,
则插入lst中del所指元素到现链表的pos上,或者用start和end指定范围。

*/
    li2.clear();
    randList(li2);
    cout << endl;
    cout << "li2的元素:";
    displayforeach(li2);
    li.splice(li.end(), li2);
    cout << endl;
    cout<<"把li2链接到li末尾:"<<endl << "li的元素:";
    displayforeach(li);
    cout << endl;


//unique() 删除list中重复的元素 
    li.unique();
    cout << " 删除list中重复的元素 " << endl;
    cout << "li的元素:";
    displayforeach(li);
    cout << endl;

//把 li的数据保存到文件中。
    writeFile(li);

    system("pause");
    return 0;
}

/*
rand
语法:int rand( void );
功能: 函数返回一个在零到RAND_MAX 之间的伪随机整数。
例如: srand( time(NULL) );   
      for( i = 0; i < 10; i++ )     
      printf( "Random number #%d: %d\n", i, rand() );
srand
语法: void srand( unsigned seed );
功能: 设置rand()随机序列种子。对于给定的种子seed, rand()会反复产生特定的随机序列。     
srand( time(NULL) );    
for( i = 0; i < 10; i++ )      
printf( "Random number #%d: %d\n", i, rand() );

*/

void randList(list<int> &li) {
    srand((int) time(NULL));
    for (int i = 0; i <8; i++)
    {
        li.push_back(rand()%100);
    }
}


//迭代器遍历
void displayiterator(list<int> li) {
    /*
    iterator begin() 返回指定容器对象的首元素的迭代器。
    iterator end() 返回指定容器对象的末元素后面位置的迭代器
    */
    list<int>::iterator ite;
    for (ite = li.begin(); ite!=li.end(); ite++)
        cout << *ite << " ";
}

//foreach遍历
void displayforeach(list<int>li) {
    for (int i : li) {
        cout << i << " ";
    }
}

void writeFile(list<int> li) {
    cout << "数据写入文件" << endl;

    ofstream ofs("D:\\works_c++\\list.txt");
    list<int>::iterator it;
    for (it = li.begin(); it != li.end(); it++)
        ofs << *it << " ";
}

结果:


结果.PNG

文件.PNG


对C++ I/O流不熟悉的同学,可以看看这篇文章:

c++那些事儿7.0 I/O流,文件操作

参考文献:


C++容器之list

C++ vector和list的区别

C++中list用法详解

c++ 容器(list学习总结)

C++ List的用法(整理)

代码语言:javascript
复制
今天早上跑步了,坚持继续加油.

c++ 的文章可以写许多,c11还有好多东西,其实我想写java了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先对STL不熟悉的同学,可以先看看这篇文章里有些东西:
    • 知识点综述:
      • 相关代码:
        • 结果:
          • 参考文献:
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档