C++的STL库介绍及使用(初学者请食用)

C++ STL(标准模板库)是C++中提供的一个强大而广泛的库,包含了多种常用的模板类和算法。对于初学者来说,掌握STL的基础是非常重要的,它能大大提高代码的效率和简洁性。下面是适用于C++ STL库初学者的使用方法,涵盖了常用的容器、算法和迭代器等基本内容。

1. STL容器

STL容器是存储数据的类模板,常见的容器包括:

  • Vector(向量)
  • List(链表)
  • Deque(双端队列)
  • Map(映射)
  • Set(集合)
  • Stack(栈)
  • Queue(队列)
  • Priority Queue(优先队列)
1.1 Vector

vector 是一个动态数组,支持快速随机访问,允许动态增加或删除元素。

#include 
#include 

int main() {
    // 创建一个空的vector
    std::vector vec;

    // 向vector中添加元素
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);

    // 遍历vector
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";  // 输出:10 20 30
    }
    std::cout << std::endl;

    // 访问元素
    std::cout << "First element: " << vec[0] << std::endl;  // 输出:First element: 10

    return 0;
}
1.2 List

list 是一个双向链表,支持在任意位置进行插入和删除,但不支持快速随机访问。

#include 
#include 

int main() {
    std::list lst;
    lst.push_back(10);
    lst.push_back(20);
    lst.push_front(5);

    // 遍历list
    for (int x : lst) {
        std::cout << x << " ";  // 输出:5 10 20
    }
    std::cout << std::endl;

    return 0;
}
1.3 Map

map 是一个键值对容器,自动根据键进行排序。每个元素是一个键值对,键是唯一的。

#include 
#include 

int main() {
    std::map myMap;
    myMap["apple"] = 5;
    myMap["banana"] = 3;
    myMap["orange"] = 7;

    // 访问map中的元素
    for (auto& pair : myMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    return 0;
}

2. STL算法

STL还提供了很多常用的算法,如排序、查找、复制等。

2.1 排序
#include 
#include 
#include   // 包含算法库

int main() {
    std::vector vec = {3, 1, 4, 1, 5, 9, 2};

    // 使用sort算法排序
    std::sort(vec.begin(), vec.end());

    // 输出排序后的vector
    for (int i : vec) {
        std::cout << i << " ";  // 输出:1 1 2 3 4 5 9
    }
    std::cout << std::endl;

    return 0;
}
2.2 查找
#include 
#include 
#include 

int main() {
    std::vector vec = {10, 20, 30, 40, 50};

    // 使用find查找元素
    auto it = std::find(vec.begin(), vec.end(), 30);
    if (it != vec.end()) {
        std::cout << "Found: " << *it << std::endl;  // 输出:Found: 30
    } else {
        std::cout << "Not found!" << std::endl;
    }

    return 0;
}

3. STL迭代器

STL容器通常使用迭代器来访问元素,迭代器是一种类似指针的对象,支持指向容器中的元素。

3.1 使用迭代器遍历容器
#include 
#include 

int main() {
    std::vector vec = {1, 2, 3, 4, 5};

    // 使用迭代器遍历
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";  // 输出:1 2 3 4 5
    }
    std::cout << std::endl;

    return 0;
}

4. STL其他常用特性

4.1 Lambda表达式

Lambda表达式是一个匿名函数,可以在STL算法中使用。

#include 
#include 
#include 

int main() {
    std::vector vec = {10, 20, 30, 40, 50};

    // 使用lambda表达式打印元素
    std::for_each(vec.begin(), vec.end(), [](int x) {
        std::cout << x << " ";  // 输出:10 20 30 40 50
    });
    std::cout << std::endl;

    return 0;
}
4.2 智能指针

C++11引入了std::unique_ptrstd::shared_ptr等智能指针,用于自动管理内存,避免内存泄漏。

#include 
#include 

int main() {
    std::unique_ptr p(new int(10));
    std::cout << *p << std::endl;  // 输出:10
    // 不需要手动删除内存,智能指针会在作用域结束时自动释放
    return 0;
}

5. 常用头文件

使用STL时,通常需要引入相应的头文件:

  • #include :用于 vector 容器
  • #include :用于 list 容器
  • #include :用于 map 容器
  • #include :用于 set 容器
  • #include :用于STL算法(如排序、查找等)
  • #include :用于智能指针

随着对STL的深入理解,你会发现它能极大地提高代码的效率可读性

你可能感兴趣的:(c++,开发语言)