首先對STL不熟悉的同學,可以先看看這篇文章里有些東西:
知識點綜述:
List:序列式容器,雙向鏈表,在內存中不連續(xù)存放。
優(yōu)點: 插入,刪除元素效率高。
STL的基本知識點:
1.0 容器:容納各種數據類型的通用數據結構,是類模板。
2.0 迭代器:可以依次存取容器的元素,類似指針。
3.0 算法用來操作容器中元素的函數模板。
list數據結構:
list.PNG
list相關函數:
list相關函數.PNG
相關代碼:
#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()
{
//創(chuàng)建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前插入區(qū)間[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的區(qū)別
C++中l(wèi)ist用法詳解
c++ 容器(list學習總結)
C++ List的用法(整理)
今天早上跑步了,堅持繼續(xù)加油.
c++ 的文章可以寫許多,c11還有好多東西,其實我想寫java了。