C++ list容器-53-链表大小操作和插入删除操作

绝地灬酷狼 2022-11-25 00:51 261阅读 0赞

这篇接着前面的list容器的基本概念之后,这里继续学习list容器的常用API。先学习list的大小相关操作,也就是元素个数,判断是否为空,重置大小。然后学习list容器的插入和删除,插入是重点,至少有头尾插入和中间任意元素位置插入。

1.list容器大小操作

函数原型

20200806221604298.png

这几个api,我们前面学习其他容器都接触过。下面使用简单代码来测试下

  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. using namespace std;
  5. void printList(const list<int>& l)
  6. {
  7. for(list<int>::const_iterator it = l.begin(); it != l.end(); it++)
  8. {
  9. cout << *it << " ";
  10. }
  11. cout << endl;
  12. }
  13. void test01()
  14. {
  15. // list 大小
  16. list<int> li; // 默认构造函数
  17. // 添加数据
  18. li.push_back(10);
  19. li.push_back(20);
  20. li.push_back(30);
  21. li.push_back(40);
  22. li.push_back(50);
  23. printList(li);
  24. cout << "current size:" << li.size() << endl;
  25. // 判断是否为空
  26. cout << "is Empty? " << li.empty() << endl;
  27. // 重置list的大小
  28. li.resize(3);
  29. cout << "current size:" << li.size() << endl;
  30. printList(li);
  31. }
  32. int main()
  33. {
  34. test01();
  35. system("pause");
  36. return 0;
  37. }

运行结果:

20200806222042908.png

上面判断是否为空,0表示false, 1表示true

2.list容器的插入操作

插入相关操作API函数原型

20200806222201768.png

第一个push_back() 在容器尾部插入一个元素,这个我们已经使用过,非常熟悉。先联系头尾部添加和删除操作。

  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. using namespace std;
  5. void printList(const list<int>& l)
  6. {
  7. for(list<int>::const_iterator it = l.begin(); it != l.end(); it++)
  8. {
  9. cout << *it << " ";
  10. }
  11. cout << endl;
  12. }
  13. void test01()
  14. {
  15. // list 大小
  16. list<int> li; // 默认构造函数
  17. // 尾部加数据
  18. li.push_back(10);
  19. li.push_back(20);
  20. printList(li);
  21. // 头部加数据
  22. li.push_front(100);
  23. li.push_front(200);
  24. printList(li);
  25. // 尾部删除
  26. li.pop_back();
  27. printList(li);
  28. // 头部删除
  29. li.pop_front();
  30. printList(li);
  31. }
  32. int main()
  33. {
  34. test01();
  35. system("pause");
  36. return 0;
  37. }

运行结果:

20200806222623821.png

然后看看这几个插入操作

  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. using namespace std;
  5. void printList(const list<int>& l)
  6. {
  7. for(list<int>::const_iterator it = l.begin(); it != l.end(); it++)
  8. {
  9. cout << *it << " ";
  10. }
  11. cout << endl;
  12. }
  13. void test01()
  14. {
  15. // list 大小
  16. list<int> li; // 默认构造函数
  17. // 尾部加数据
  18. li.push_back(10);
  19. li.push_back(20);
  20. printList(li);
  21. // 在pos位置插入元素e
  22. list<int>::iterator it = li.begin();
  23. li.insert(++it, 30); // 注意++it 和it++的区别
  24. printList(li);
  25. // 在迭代器位置插入n个元素e
  26. li.insert(++it, 3, 70);
  27. printList(li);
  28. // 在迭代器位置后插入一个容器的区间内元素
  29. list<int> li2; // 默认构造函数
  30. // 尾部加数据
  31. li2.push_back(100);
  32. li2.push_back(200);
  33. li.insert(++it, li2.begin(), li2.end());
  34. printList(li);
  35. }
  36. int main()
  37. {
  38. test01();
  39. system("pause");
  40. return 0;
  41. }

运行结果

20200806225229868.png

3.list容器的删除操作

最后看看删除相关的API

20200806225300632.png

  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. using namespace std;
  5. void printList(const list<int>& l)
  6. {
  7. for(list<int>::const_iterator it = l.begin(); it != l.end(); it++)
  8. {
  9. cout << *it << " ";
  10. }
  11. cout << endl;
  12. }
  13. void test01()
  14. {
  15. // list 大小
  16. list<int> li; // 默认构造函数
  17. // 尾部加数据
  18. li.push_back(10);
  19. li.push_back(20);
  20. li.push_back(30);
  21. li.push_back(30);
  22. li.push_back(40);
  23. printList(li);
  24. // 删除pos位置数据
  25. list<int>::iterator it = li.begin();
  26. li.erase(++it);
  27. printList(li);
  28. // 删除值等于30的全部元素
  29. li.remove(30);
  30. printList(li);
  31. // 清空
  32. li.clear();
  33. cout << "current size: " << li.size() << endl;
  34. }
  35. int main()
  36. {
  37. test01();
  38. system("pause");
  39. return 0;
  40. }

运行结果:

20200806225737855.png

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读