📜  C++ STL教程(1)

📅  最后修改于: 2023-12-03 14:59:47.224000             🧑  作者: Mango

C++ STL教程

STL(Standard Template Library,标准模板库)是C ++中的一组模板类,函数和算法,可以使程序员更高效地编写代码。它是C ++标准化委员会在1994年引入的,并且现在被认为是C ++程序员的基本工具之一。

容器

容器是STL的核心组件之一。以下是一些常用的容器:

  1. vector
  2. list
  3. deque
  4. queue
  5. stack
  6. set
  7. map
vector

vector是STL中的一个动态数组,它可以自动地调整大小,以适应存储元素的需求。以下是vector的一些基本操作:

#include <vector>
#include <iostream>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3};

    //向vector中添加元素
    v.push_back(4);

    //使用迭代器遍历vector
    std::vector<int>::iterator iter;
    for(iter = v.begin(); iter != v.end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    //获取vector的大小
    std::cout << "The size of vector is " << v.size() << std::endl;

    return 0;
}
list

list是STL中的一个双向链表。以下是list的一些基本操作:

#include <list>
#include <iostream>

int main()
{
    //创建一个list并添加元素
    std::list<int> l = {1, 2, 3};

    //向list中添加元素
    l.push_back(4);
    l.push_front(0);

    //使用迭代器遍历list
    std::list<int>::iterator iter;
    for(iter = l.begin(); iter != l.end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    //获取list的大小
    std::cout << "The size of list is " << l.size() << std::endl;

    return 0;
}
deque

deque是STL中的一个双端队列。以下是deque的一些基本操作:

#include <deque>
#include <iostream>

int main()
{
    //创建一个deque并添加元素
    std::deque<int> d = {1, 2, 3};

    //向deque中添加元素
    d.push_back(4);
    d.push_front(0);

    //使用迭代器遍历deque
    std::deque<int>::iterator iter;
    for(iter = d.begin(); iter != d.end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    //获取deque的大小
    std::cout << "The size of deque is " << d.size() << std::endl;

    return 0;
}
set

set是STL中的一个排序的集合。以下是set的一些基本操作:

#include <set>
#include <iostream>

int main()
{
    //创建一个set并添加元素
    std::set<int> s = {1, 2, 3};

    //向set中添加元素
    s.insert(4);

    //使用迭代器遍历set(由于set是有序的,因此不需要使用下标运算符)
    std::set<int>::iterator iter;
    for(iter = s.begin(); iter != s.end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    //获取set的大小
    std::cout << "The size of set is " << s.size() << std::endl;

    //检查set是否包含一个元素
    if(s.count(5))
    {
        std::cout << "Set contains 5" << std::endl;
    }
    else
    {
        std::cout << "Set does not contain 5" << std::endl;
    }

    return 0;
}
map

map是STL中的一个关联数组。以下是map的一些基本操作:

#include <map>
#include <iostream>

int main()
{
    //创建一个map并添加元素
    std::map<std::string, int> m;
    m["apple"] = 1;
    m["banana"] = 2;
    m["orange"] = 3;

    //使用迭代器遍历map
    std::map<std::string, int>::iterator iter;
    for(iter = m.begin(); iter != m.end(); ++iter)
    {
        std::cout << iter->first << ": " << iter->second << std::endl;
    }

    //获取map的大小
    std::cout << "The size of map is " << m.size() << std::endl;

    //检查map是否包含一个键
    if(m.count("banana"))
    {
        std::cout << "Map contains banana: " << m["banana"] << std::endl;
    }
    else
    {
        std::cout << "Map does not contain banana" << std::endl;
    }

    return 0;
}
迭代器

迭代器是STL的另一个核心组件,它提供了一种遍历访问容器中元素的方式。以下是一些常用的迭代器:

  1. iterator
  2. const_iterator
  3. reverse_iterator
  4. const_reverse_iterator
iterator

iterator是最普通的迭代器,它提供了读写访问容器中元素的方式。以下是使用iterator遍历一个vector的例子:

#include <vector>
#include <iostream>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3};

    //使用iterator遍历vector
    std::vector<int>::iterator iter;
    for(iter = v.begin(); iter != v.end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    return 0;
}
const_iterator

const_iterator是只读的迭代器,它提供了只读访问容器中元素的方式。以下是使用const_iterator遍历一个vector的例子:

#include <vector>
#include <iostream>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3};

    //使用const_iterator遍历vector
    std::vector<int>::const_iterator iter;
    for(iter = v.begin(); iter != v.end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    return 0;
}
reverse_iterator

reverse_iterator是反向迭代器,它提供了反向遍历容器中元素的方式。以下是使用reverse_iterator遍历一个vector的例子:

#include <vector>
#include <iostream>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3};

    //使用reverse_iterator遍历vector
    std::vector<int>::reverse_iterator iter;
    for(iter = v.rbegin(); iter != v.rend(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    return 0;
}
const_reverse_iterator

const_reverse_iterator是只读的反向迭代器,它提供了只读的反向遍历容器中元素的方式。以下是使用const_reverse_iterator遍历一个vector的例子:

#include <vector>
#include <iostream>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3};

    //使用const_reverse_iterator遍历vector
    std::vector<int>::const_reverse_iterator iter;
    for(iter = v.rbegin(); iter != v.rend(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    return 0;
}
算法

STL还提供了一些常用的算法,可以用于处理容器中的元素。以下是一些常用的算法:

  1. find
  2. sort
  3. accumulate
  4. count
  5. remove
find

find算法用于在容器中查找指定的元素,如果找到了,就返回该元素的迭代器,否则返回容器的end()迭代器。以下是一个在vector中使用find算法的例子:

#include <vector>
#include <iostream>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3, 4, 5};

    //查找元素3
    std::vector<int>::iterator iter = std::find(v.begin(), v.end(), 3);

    //判断是否找到了元素3
    if(iter != v.end())
    {
        std::cout << "Found element: " << *iter << std::endl;
    }
    else
    {
        std::cout << "Element not found" << std::endl;
    }

    return 0;
}
sort

sort算法用于对容器中的元素进行排序。以下是一个在vector中使用sort算法的例子:

#include <vector>
#include <iostream>
#include <algorithm>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {5, 2, 4, 1, 3};

    //使用sort算法对vector进行排序
    std::sort(v.begin(), v.end());

    //使用迭代器遍历已排序的vector
    std::vector<int>::iterator iter;
    for(iter = v.begin(); iter != v.end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }

    return 0;
}
accumulate

accumulate算法用于对容器中的元素进行累加。以下是一个在vector中使用accumulate算法的例子:

#include <vector>
#include <iostream>
#include <numeric>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3, 4, 5};

    //使用accumulate算法对vector中的元素进行累加
    int sum = std::accumulate(v.begin(), v.end(), 0);

    //输出累加结果
    std::cout << "Sum of elements in vector: " << sum << std::endl;

    return 0;
}
count

count算法用于计算容器中指定元素的数量。以下是一个在vector中使用count算法的例子:

#include <vector>
#include <iostream>
#include <algorithm>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3, 2, 4, 2, 5};

    //计算元素2在vector中出现的次数
    int count = std::count(v.begin(), v.end(), 2);

    //输出计数结果
    std::cout << "Number of occurrences of 2 in vector: " << count << std::endl;

    return 0;
}
remove

remove算法用于从容器中删除指定元素。以下是一个在vector中使用remove算法的例子:

#include <vector>
#include <iostream>
#include <algorithm>

int main()
{
    //创建一个vector并添加元素
    std::vector<int> v = {1, 2, 3, 2, 4, 2, 5};

    //使用remove算法删除元素2
    std::vector<int>::iterator iter = std::remove(v.begin(), v.end(), 2);

    //输出已删除元素的编号
    std::cout << "Removed elements: ";
    for(std::vector<int>::iterator i = v.begin(); i != iter; ++i)
    {
        std::cout << *i << " ";
    }
    std::cout << std::endl;

    //输出剩余元素
    std::cout << "Remaining elements: ";
    for(std::vector<int>::iterator i = iter; i != v.end(); ++i)
    {
        std::cout << *i << " ";
    }
    std::cout << std::endl;

    return 0;
}
总结

STL是C ++程序员常用的工具之一。它包含了几种不同的容器、迭代器和算法,可以让程序员更加高效地编写代码。本教程中的内容只是STL的冰山一角,读者可以阅读更多的资料来深入了解STL。