目錄:
- 初始化
- 插入資料
- 周遊資料
- 删除資料
- 排序資料
- 合并資料
- 交換資料
- 擷取首/尾資料
- 初始化
// list 初始化
void InitList()
{
list<int> lst; //初始化一個空的
list<int> lst1(); // 初始化一個包括10個元素的,且10個元素值都是0
list<int> lst2(, ); // 初始化一個包括10個原始,且10個元素值都是55
list<int> lst3(lst1); // 使用一個list來初始化,建立了一個副本
list<int> lst4(++lst2.begin(),--lst2.end()); // 使用一個list的部分元素來初始化
}
- 插入資料
// list 插入資料
template <class T>
list<T> InsertList(list<T> lst, T t)
{
lst.push_back(t); // 插入到清單末端
t = ;
lst.push_front(t); // 插入到清單的最前端
lst.assign(, t); // 放入10個相同的元素(會清除掉之前存入的所有資料)
T arr[] = {,,,,,,,,,};
lst.assign(arr, arr + ); // 将數組資料放入list(會清除掉之前存入的資料)
list<T> lst1(, );
lst.insert(lst.begin(), lst1.begin(), lst1.end()); // 在指定位置,插入另一個list的部分元素
lst.insert(lst.end(), , ); // 在指定位置,插入5個元素,值均為20
lst.insert(--lst.end(), ); // 在指定位置,直接插入值為25的元素
return lst;
}
- 周遊資料
// list 周遊資料
void IteratorList(list<int> lst)
{
if (lst.empty()) // 判斷清單是否為空
return;
list<int>::iterator iter = lst.begin(); // 前向疊代器
for (; iter != lst.end(); iter++)
{
cout << "iter value: " << *iter << endl;
}
list<int>::reverse_iterator revIter = lst.rbegin(); // 方向疊代器
for (; revIter != lst.rend(); revIter++)
{
cout << "revIter value: " << *revIter << endl;
}
list<int>::const_iterator constIter = lst.cbegin();
for (; constIter != lst.cend(); constIter++)
{
cout << "constIter value: " << *constIter << endl;
}
}
- 删除資料
// list 删除資料
void DeleteList(list<int>& lst)
{
if (lst.empty())
return;
lst.pop_back(); // 删除末尾的元素
lst.pop_front(); // 删除第一個元素
lst.erase(lst.begin(), ++lst.begin()); // 删除指定範圍的元素(使用疊代器來确定需要被删除的元素),區間[ )
lst.erase(--lst.end()); // 删除指定疊代器指向的元素
lst.remove(); // 删除指定值的元素,若多個元素值相同,則多個元素均會被删除(通過數值的方式來确定被删除元素,且删除所有與 val 值相等的元素)
lst.unique(); // 删除list中重複的資料,即去重,會保留一個元素
lst.clear(); // 清除掉所有資料
}
- 排序資料
int arr[] = {,,,,,,,,,};
lst.assign(arr, arr + ); // 将數組資料放入list(會清除掉之前存入的資料)
lst.sort(); // 按從小到大排序
list<int>::iterator iter = lst.begin();
for (; iter != lst.end(); iter++)
{
cout << "iter value: " << *iter << endl; // 分别輸出:0 1 2 3 4 5 6 7 8 9
}
lst.reverse(); // 按從大到小排序,即倒序
iter = lst.begin();
for (; iter != lst.end(); iter++)
{
cout << "iter value: " << *iter << endl; // 分别輸出:9 8 7 6 5 4 3 2 1 0
}
- 合并資料
list<int> lst1(, ); // 10個元素,值均為33
list<int> lst2(, ); // 10個元素,值均為44
list<int> lst3(, ); // 10個元素,值均為55
// 合并方式一
lst1.merge(lst2); // 合并元素後,lst2被清空,在lst1的末端添加lst2的元素。即将lst2中元素移到lst1中
// 合并方式二
lst1.splice(lst1.begin(), lst3, lst3.begin(), --lst3.end()); // 在指定位置,将lst3中的指定範圍元素移到lst1中,lst3中對應元素被清除,區間範圍:[ }
lst1.splice(lst1.end(), lst3, lst3.begin()); // 在指定位置,将lst3中指定元素移到lst1中,同時從lst3中清除該元素
lst1.splice(lst1.end(), lst3); // 在指定位置,将lst3中所有元素移至lst1中,并清空lst3
- 交換資料
list<int> lst1(, ); // 10個元素,值均為33
list<int> lst2(, ); // 10個元素,值均為44
lst1.swap(lst2); // 二個list互相互動所有元素
- 擷取首/尾資料
list<int> lst;
int arr[] = {,,,,,,,,,};
lst.assign(arr, arr + );
// 擷取最後一個和第一個元素的值
cout << "back value:" << lst.back() << "front value:" << lst.front() << endl; // 輸出 back value:0 front value:3
cout << ++lst.back() << "\t" << ++lst.front() << endl; // 輸出 1 4,同時list中對應元素也變成了1和4