您的位置:首页 > 编程语言 > C语言/C++

C++ list基本使用总结

2018-04-09 10:16 337 查看
目录:

- 初始化

- 插入数据

- 遍历数据

- 删除数据

- 排序数据

- 合并数据

- 交换数据

- 获取首/尾数据

初始化

// list 初始化
void InitList()
{
list<int> lst; //初始化一个空的

list<int> lst1(10); // 初始化一个包括10个元素的,且10个元素值都是0

list<int> lst2(10, 55); // 初始化一个包括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 = 10;
lst.push_front(t); // 插入到列表的最前端

lst.assign(10, t); // 放入10个相同的元素(会清除掉之前存入的所有数据)

T arr[10] = {1,2,3,4,5,6,7,8,9,0};
lst.assign(arr, arr + 10); // 将数组数据放入list(会清除掉之前存入的数据)

list<T> lst1(10, 15);
lst.insert(lst.begin(), lst1.begin(), lst1.end()); // 在指定位置,插入另一个list的部分元素
lst.insert(lst.end(), 5, 20); // 在指定位置,插入5个元素,值均为20
lst.insert(--lst.end(), 25); // 在指定位置,直接插入值为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(20); // 删除指定值的元素,若多个元素值相同,则多个元素均会被删除(通过数值的方式来确定被删除元素,且删除所有与 val 值相等的元素)

lst.unique(); // 删除list中重复的数据,即去重,会保留一个元素

lst.clear(); // 清除掉所有数据
}


排序数据

int arr[10] = {3,2,1,4,6,5,9,7,8,0};
lst.assign(arr, arr + 10); // 将数组数据放入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); // 10个元素,值均为33
list<int> lst2(10, 44); // 10个元素,值均为44
list<int> lst3(10, 55); // 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); // 10个元素,值均为33
list<int> lst2(10, 44); // 10个元素,值均为44

lst1.swap(lst2); // 二个list相互交互所有元素


获取首/尾数据

list<int> lst;
int arr[10] = {3,2,1,4,6,5,9,7,8,0};
lst.assign(arr, arr + 10);
// 获取最后一个和第一个元素的值
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ STL list