博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++那些事儿11 0 STL List
阅读量:6983 次
发布时间:2019-06-27

本文共 5060 字,大约阅读时间需要 16 分钟。

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


###知识点综述:

List:序列式容器,双向链表,在内存中不连续存放。 优点: 插入,删除元素效率高。

STL的基本知识点:

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


**list数据结构:**

list相关函数:

###相关代码:


#include
#include
#include
#include
#include
#include
#include
using namespace std;// void displayfor(list
li);void displayiterator(list
li);void displayforeach(list
li);void randList(list
&li);void writeFile(list
li);int main() { //创建vector对象。 list
li; //容器为空。 //bool empty() 判断容器是否为空(返回true时为空) cout << "li 是否为空:" <
<< 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
::iterator iter1 = li.end(); list
::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
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
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
::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末尾:"<
<< "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
&li) { srand((int) time(NULL)); for (int i = 0; i <8; i++) { li.push_back(rand()%100); }}//迭代器遍历void displayiterator(list
li) { /* iterator begin() 返回指定容器对象的首元素的迭代器。 iterator end() 返回指定容器对象的末元素后面位置的迭代器 */ list
::iterator ite; for (ite = li.begin(); ite!=li.end(); ite++) cout << *ite << " ";}//foreach遍历void displayforeach(list
li) { for (int i : li) { cout << i << " "; }}void writeFile(list
li) { cout << "数据写入文件" << endl; ofstream ofs("D:\\works_c++\\list.txt"); list
::iterator it; for (it = li.begin(); it != li.end(); it++) ofs << *it << " ";}复制代码

###结果:



**对C++ I/O流不熟悉的同学,可以看看这篇文章:** [c++那些事儿7.0 I/O流,文件操作](http://www.jianshu.com/p/4bf9044c504a)

###参考文献:


 

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

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

转载地址:http://flxpl.baihongyu.com/

你可能感兴趣的文章
数据格式校验
查看>>
Django搭建个人博客:上传头像图片
查看>>
Docker与自动化测试及其测试实践
查看>>
Java-集合的简单介绍
查看>>
分布式架构发展
查看>>
针对不同的系统的宏定义
查看>>
Spring Boot + Vue 前后端分离,两种文件上传方式总结
查看>>
第一次搭建阿里云服务器
查看>>
java 文件存储
查看>>
Android build.gradle 获取Git 仓库数据
查看>>
十分钟熟练Dockerfile指令
查看>>
ES6新特征总结与介绍——声明与表达式
查看>>
python3实现抓取网页资源的 N 种方法(内附200GPython学习资料)
查看>>
自定义网络请求框架
查看>>
Unity(射线)
查看>>
阿里云媒体转码MTS使用教程
查看>>
shell常见的文件属性检查
查看>>
年度最期待游戏废土2登陆Linux
查看>>
CA knowledge study
查看>>
linux目录结构简析
查看>>