📅  最后修改于: 2023-12-03 14:59:47.224000             🧑  作者: Mango
STL(Standard Template Library,标准模板库)是C ++中的一组模板类,函数和算法,可以使程序员更高效地编写代码。它是C ++标准化委员会在1994年引入的,并且现在被认为是C ++程序员的基本工具之一。
容器是STL的核心组件之一。以下是一些常用的容器:
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是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是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是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是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的另一个核心组件,它提供了一种遍历访问容器中元素的方式。以下是一些常用的迭代器:
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遍历一个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遍历一个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遍历一个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还提供了一些常用的算法,可以用于处理容器中的元素。以下是一些常用的算法:
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算法用于对容器中的元素进行排序。以下是一个在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算法用于对容器中的元素进行累加。以下是一个在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算法用于计算容器中指定元素的数量。以下是一个在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算法用于从容器中删除指定元素。以下是一个在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。