天天看點

C++ list基本使用總結

目錄:

- 初始化

- 插入資料

- 周遊資料

- 删除資料

- 排序資料

- 合并資料

- 交換資料

- 擷取首/尾資料

  • 初始化
// 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
           

繼續閱讀