C++(7): std::list的使用

std::list 容器介绍及用法

1. std::list

std::list是 C++ 标准模板库(STL)中的一个顺序容器适配器,它提供了双向链表的数据结构。与 std::vector 不同,std::list 不存储连续的元素,因此它可以高效地在中间插入和删除元素,而不需要移动其他元素。

2. 特点

(1)动态大小:std::list 的大小可以在运行时动态改变。

(2)插入和删除操作:在任何位置插入和删除元素都非常高效。

(3)内存分配:std::list 会分散地分配内存,这有助于减少内存碎片。

(4)性能:访问元素的速度较慢(相对于 std::vector),因为需要遍历链表。

3. 基本用法

std::list 支持大多数标准的容器操作,如 push_back、push_front、pop_back、pop_front、insert、erase 等。

(1)声明一个 std::list

#include <list>

std::list<int> myList;

(2)插入元素

/** 在末尾插入 */

myList.push_back(10);

/** 在开头插入 */

myList.push_front(20);

/** 在特定位置插入 */

auto it = std::find(stringList.begin(), stringList.end(), "20");

if(it != stringList.end()){

    stringList.insert(it, "30");

}

(3)删除元素

/** 删除末尾元素 */

myList.pop_back();

/** 删除开头元素 */

myList.pop_front();

/** 删除特定位置的元素 */

it = myList.begin();

it++; ///< 移动到第一个元素

myList.erase(it); ///< 删除当前指向的元素

(4)遍历 std::list

for(std::list<int>::iterator it = myList.begin(); it != myList.end(); ++it)

{

    std::cout << *it << std::endl;

}

4. 例程

以下是一个简单的例程,演示了如何使用 std::list 来存储和操作字符串。

#include <iostream>

#include <list>

#include <algorithm> 


int main()

{

    std::list<std::string> stringList;

    /** 插入字符串. */

    stringList.push_back("Apple");

    stringList.push_back("Banana");

    stringList.push_back("Cherry");

    /** 遍历并打印字符串. */

    std::cout << "List before modification: ";

    for (const auto& str : stringList) {

        std::cout << str << " ";

    }

    std::cout << std::endl; ///< 在链表中间插入一个新的字符串.

    auto it = std::find(stringList.begin(), stringList.end(), "Banana");

    if(it != stringList.end()){

        stringList.insert(it, "Date");

    }

    /** 删除一个字符串. */

    stringList.remove("Banana");

    /** 再次遍历并打印字符串. */

    std::cout << "List after modification: ";

    for (const auto& str : stringList) {

        std::cout << str << " ";

    }

    std::cout << std::endl;

    return 0;

}

相关推荐

  1. C++(7): std::list使用

    2024-03-27 12:30:06       45 阅读
  2. .NET 7C#)配置使用log4net日志框架方法

    2024-03-27 12:30:06       47 阅读
  3. C#中使用s7Netplus实现与西门子PLC数据通信

    2024-03-27 12:30:06       28 阅读
  4. centos7编译c++碰到

    2024-03-27 12:30:06       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 12:30:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 12:30:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 12:30:06       82 阅读
  4. Python语言-面向对象

    2024-03-27 12:30:06       91 阅读

热门阅读

  1. MFC:组合框ComboBox的使用

    2024-03-27 12:30:06       37 阅读
  2. 《促进和规范数据跨境流动规定》答记者问

    2024-03-27 12:30:06       39 阅读
  3. yarn安装和使用及与npm的区别

    2024-03-27 12:30:06       45 阅读
  4. Redis常见问题及解决方案

    2024-03-27 12:30:06       46 阅读
  5. SpringBoot 统一后端返回格式、处理全局异常

    2024-03-27 12:30:06       41 阅读
  6. spark累加器

    2024-03-27 12:30:06       42 阅读