cpp的STL之list

cpp的STL之list

特点就是个双向链表

基本操作

//
//  main.cpp
//  use_stl_list
//
//  Created by bikang on 16/10/28.
//  Copyright (c) 2016年 bikang. All rights reserved.
//

#include <iostream>
#include <list>
using namespace std;

void tlist();

bool sortFunc(const int &a,const int &b);


int main(int argc, const char * argv[]) {
    // insert code here...
    tlist();
    return 0;
}

void tlist(){

    //创建
    std::list<int> l1;
    //插入
    l1.push_front(11);
    l1.push_front(21);
    l1.push_back(3);
    //大小
    cout << l1.size()<<endl;
    //指定的位置插入
    l1.insert(l1.begin(), 2);
    //指定的位置插入多个重复的值
    l1.insert(l1.begin(), 3,0);



    //列表显示
    list<int>::iterator elem;
    for(elem=l1.begin();elem!=l1.end();++elem){
        cout << *elem <<",";
    }
    cout << endl;

    //其他插入
    list<int> l2;
    l2.push_back(1111);
    l2.insert(l2.begin(), l1.begin(),l1.end());

    //删除
    l2.erase(l2.begin());
    //范围删除
    //l2.erase(l2.begin(),l2.end());

    l2.push_back(21);

    for(elem=l2.begin();elem!=l2.end();++elem){
        cout << *elem <<",";
    }
    cout << endl;
    //反转
    l2.reverse();

    for(elem=l2.begin();elem!=l2.end();++elem){
        cout << *elem <<",";
    }
    cout << endl;

    //排序
    l2.sort();

    for(elem=l2.begin();elem!=l2.end();++elem){
        cout << *elem <<",";
    }
    cout << endl;

    //根据排序函数排序
    l2.sort(sortFunc);

    for(elem=l2.begin();elem!=l2.end();++elem){
        cout << *elem <<",";
    }
    cout << endl;




}

bool sortFunc(const int &a,const int &b){
    return (a > b);
}
04-02
<think>好的,用户让我介绍一下C++的STL,也就是标准模板库。首先,我需要回忆一下STL的基本概念和组成部分。STL是C++标准库的一部分,提供了一系列通用的模板类和函数,主要包括容器、算法、迭代器、函数对象和适配器等。这些组件帮助开发者高效地编写代码,避免重复造轮子。 接下来,用户可能想了解STL的主要组成部分。我需要分点解释每个部分的作用和常见用法。例如,容器分为序列容器(如vector、list、deque)、关联容器(如set、map)和无序关联容器(如unordered_set、unordered_map)。算法部分包括排序、查找、遍历等,比如sort和find。迭代器作为容器和算法之间的桥梁,有不同的类型,如输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。 然后,需要提到函数对象,比如仿函数,以及适配器如stack和queue,它们基于其他容器实现。还要强调STL的优势,比如泛型编程、高效性和可扩展性,这些特点让STL成为C++程序员的重要工具。 用户可能的疑问包括如何选择合适的容器或算法,或者STL的实际应用例子。比如,当需要快速查找时,可以选择map或unordered_map,而vector适合动态数组的情况。此外,可能还需要提到一些使用注意事项,比如迭代器失效问题,或者性能考虑,比如vector的连续内存带来的优势与可能的扩容开销。 最后,确保回答结构清晰,分点说明,并给出简单的代码示例,比如使用vector和sort算法的例子,这样用户能更直观地理解。同时,保持语言简洁,避免过于技术性的术语,让初学者也能理解。检查是否遵循了格式要求,比如行内公式用$...$,独立公式用$$...$$,但在这个问题中可能不太涉及数学公式,所以主要注意代码块的格式是否正确。</think>C++ STL(Standard Template Library)是C++标准库的核心组成部分,提供了一套可复用的通用数据结构和算法。以下是结构化讲解: ### 一、核心组件 $$STL = 容器 + 算法 + 迭代器 + 函数对象 + 适配器$$ 1. **容器(Containers)** - 序列容器: - `vector`:动态数组,支持快速随机访问 ```cpp std::vector<int> v = {1,2,3}; v.push_back(4); // 时间复杂度$O(1)$ ``` - `list`:双向链表,插入/删除高效 - `deque`:双端队列 - 关联容器: - `set/map`:基于红黑树实现,有序存储 - `unordered_set/unordered_map`:哈希表实现,平均访问时间$O(1)$ 2. **算法(Algorithms)** - 排序算法:`sort(v.begin(), v.end())` - 查找算法:`find(v.begin(), v.end(), target)` - 数值算法:`accumulate(v.begin(), v.end(), 0)` 3. **迭代器(Iterators)** - 行为类似指针的抽象层 - 分类: ```mermaid graph LR A[迭代器] --> B[输入迭代器] A --> C[输出迭代器] A --> D[前向迭代器] A --> E[双向迭代器] A --> F[随机访问迭代器] ``` ### 二、关键特性 1. **泛型编程**:通过模板实现类型无关性 2. **时间复杂度保证**:容器操作有明确复杂度标注 3. **空间局部性优化**:如`vector`的连续内存布局 ### 三、最佳实践 1. 容器选择策略: | 需求 | 推荐容器 | |----------------|------------------| | 快速随机访问 | vector/deque | | 频繁插入删除 | list/forward_list| | 快速查找 | unordered系列 | 2. 算法使用技巧: - 配合lambda表达式: ```cpp std::sort(v.begin(), v.end(), [](int a, int b){ return a > b; }); ``` ### 四、性能特点 - `vector`的push_back()均摊时间复杂度为$O(1)$ - `unordered_map`查找时间复杂度: $$T(n) = \begin{cases} O(1) & \text{平均情况} \\ O(n) & \text{最坏情况} \end{cases}$$ STL通过高度优化的实现(如小对象优化、内存池技术)保证了高性能,是C++开发中不可或缺的工具集。建议结合[cppreference.com](https://en.cppreference.com/)文档进行深入学习和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值