c++那些事儿11 0 STL List

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


STL中容器相关知识点 ###知识点综述:

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

STL的基本知识点:

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


**list数据结构:**

list相关函数:

###相关代码:



#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 << " ";
}


复制代码

###结果:



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

###参考文献:


C++容器之list C++ vector和list的区别 C++中list用法详解 c++ 容器(list学习总结)   C++ List的用法(整理)

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值