📜  用C ++ STL更快地编写代码(1)

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

用C ++ STL更快地编写代码

C++ STL(标准模板库)是构建强大的、高效的、简洁的代码的关键工具之一。STL包含了各种容器、算法和函数对象,它们可立即适用于大部分的常见编程任务。使用C++ STL可以大大提高代码的运行速度和可读性。

容器

C++ STL包含了多种容器,包括vector、list、deque、map和set等。下面我们将介绍这些容器,并提供一些使用它们的示例代码。

vector

vector是C++ STL中最常用的容器之一。它是一个能够存储对象(或数据类型)动态数组,可以随时增加或减少其大小。

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

int main()
{
    vector<int>myvector{ 1, 2, 3, 4, 5 };
    for (auto i = myvector.begin(); i != myvector.end(); ++i)
        cout<< *i << " " ;
    return 0;
}
list

list是C++ STL中的另一个容器。它提供了一个双向链表的实现,可以很容易地添加、删除元素。

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

int main()
{
    list<int>mylist{ 1, 2, 3, 4, 5 };
    for (auto i = mylist.begin(); i != mylist.end(); ++i)
        cout<< *i << " ";
    return 0;
}
deque

deque是C++ STL中的另一个容器,其存储基于动态分配存储器,可以在两端高效地插入和删除元素。

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

int main()
{
    deque<int>mydeque{ 1, 2, 3, 4, 5 };
    for (auto i = mydeque.begin(); i != mydeque.end(); ++i)
        cout<< *i << " " ;
    return 0;
}
map

map是C++ STL中的一个关联容器,每个元素都是一个pair<key,value>,key为关键字,value为存储值。

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

int main()
{
    map<char, int>mymap{{ 'a', 1 }, { 'b', 2 }, { 'c', 3 }, { 'd', 4 }, { 'e', 5 }};
    for (auto i = mymap.begin(); i != mymap.end(); ++i)
        cout<< i->first << " " << i->second << endl;
    return 0;
}
set

set是C++ STL中的另一个关联容器,它提供了一种存储排序的集合的方式。相比于map,set只存储单个元素,而不是键值对。

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

int main()
{
    set<int>myset{ 5, 4, 3, 2, 1 };
    for (auto i = myset.begin(); i != myset.end(); ++i)
        cout<< *i << " " ;
    return 0;
}
算法

C++ STL提供了多种算法,包括排序、查找和集合运算等。这些算法和容器之间的互操作性使得高效和优雅的代码编写变得轻松愉悦。

排序

使用sort函数可以快速轻松地实现数组和容器的排序

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int>myvector{ 5, 4, 3, 2, 1 };
    sort(myvector.begin(), myvector.end());
    for (auto i = myvector.begin(); i != myvector.end(); ++i)
        cout<< *i << " " ;
    return 0;
}
查找

使用find函数可以实现数组和容器中值的查找。如果元素不存在,返回值将是end()迭代器。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int>myvector{ 1, 2, 3, 4, 5 };
    auto it = find(myvector.begin(), myvector.end(), 3);
    if (it != myvector.end()) 
        cout<< "Found " << *it << " at index " << std::distance(myvector.begin(), it) << endl;
    else
        cout<< "Not found\n";
    return 0;
}
集合运算

使用集合运算,例如并集、交集和差集等,也可以十分高效地实现。STL提供了多种内置算法来执行这些运算。

例如,下面的代码展示了如何使用集合运算来查找两个容器中的共同元素:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    vector<int>vec1{ 1, 2, 3, 4, 5 };
    vector<int>vec2{ 3, 4, 5, 6, 7 };
    vector<int>vec3;
    set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));
    for (auto i = vec3.begin(); i != vec3.end(); ++i)
        cout<< *i << " " ;
    return 0;
}
总结

C++ STL提供了强大的、高效的、简洁的编程工具,可以节省大量时间和精力。上述介绍的是C++ STL的基础知识,但你可以深入了解并掌握更多的STL功能,以在编程中更高效地运用STL。