C++ STL(标准模板库)是C++中提供的一个强大而广泛的库,包含了多种常用的模板类和算法。对于初学者来说,掌握STL的基础是非常重要的,它能大大提高代码的效率和简洁性。下面是适用于C++ STL库初学者的使用方法,涵盖了常用的容器、算法和迭代器等基本内容。
STL容器是存储数据的类模板,常见的容器包括:
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;
}
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;
}
map
是一个键值对容器,自动根据键进行排序。每个元素是一个键值对,键是唯一的。
#include
#include
STL还提供了很多常用的算法,如排序、查找、复制等。
#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;
}
#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;
}
STL容器通常使用迭代器来访问元素,迭代器是一种类似指针的对象,支持指向容器中的元素。
#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;
}
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;
}
C++11引入了std::unique_ptr
和std::shared_ptr
等智能指针,用于自动管理内存,避免内存泄漏。
#include
#include
int main() {
std::unique_ptr p(new int(10));
std::cout << *p << std::endl; // 输出:10
// 不需要手动删除内存,智能指针会在作用域结束时自动释放
return 0;
}
使用STL时,通常需要引入相应的头文件:
#include
:用于 vector
容器#include
:用于 list
容器#include
:用于 map
容器#include
:用于 set
容器#include
:用于STL算法(如排序、查找等)#include
:用于智能指针随着对STL的深入理解,你会发现它能极大地提高代码的效率和可读性。