STL STL四大核心组件:容器(Containers)、算法(Algorithms)、迭代器(Iterators)和 函数对象(Functors)
顺序容器 顺序容器是STL中按元素顺序存储数据的容器,允许通过位置(如索引或迭代器)访问元素。它们不自动排序,元素的逻辑顺序与插入顺序一致。
vector 使用场景
当你需要一个可以动态增长和缩小的数组时。
当你需要频繁地在序列的末尾添加或移除元素时。
当你需要一个可以高效随机访问元素的容器时。
要使用 vector,首先需要包含 <vector> 头文件:
创建Vector 1 2 3 4 vector<int > myVector0; vector<int > myVector1 (5 ) ; vector<int > myVector2 (5 , 10 ) ; vector<int > myVector3 = {1 , 2 , 3 , 4 };
添加元素 可以使用push_back方法向vector中添加元素
访问元素 可以使用下标操作符 [] 或 at() 方法访问 vector 中的元素:
1 2 int x = myVector[0 ]; int y = myVector.at (1 );
获取大小 可以使用 size() 方法获取 vector 中元素的数量:
1 int size = myVector.size ();
迭代访问 可以使用迭代器遍历 vector 中的元素:
1 2 3 for (auto it = myVector.begin (); it != myVector.end (); ++it) { std::cout << *it << " " ; }
或使用范围循环:
1 2 3 for (int element : myVector) { cout << element << " " ; }
删除元素 可以使用 erase() 方法删除 vector 中的元素:
1 myVector.erase (myVector.begin () + 2 );
清空元素 可以使用 clear() 方法清空 vector 中的所有元素:
实例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include <iostream> #include <vector> int main () { std::vector<int > myVector; myVector.push_back (3 ); myVector.push_back (7 ); myVector.push_back (11 ); myVector.push_back (5 ); std::cout << "Elements in the vector: " ; for (int element : myVector) { std::cout << element << " " ; } std::cout << std::endl; std::cout << "First element: " << myVector[0 ] << std::endl; std::cout << "Second element: " << myVector.at (1 ) << std::endl; std::cout << "Size of the vector: " << myVector.size () << std::endl; myVector.erase (myVector.begin () + 2 ); std::cout << "Elements in the vector after erasing: " ; for (int element : myVector) { std::cout << element << " " ; } std::cout << std::endl; myVector.clear (); std::cout << "Size of the vector after clearing: " << myVector.size () << std::endl; return 0 ; }
deque
deque双端队列是一种允许在两端进行插入和删除操作的线性数据结构。
deque全称是double-ended queue,它在C++中以模板类的形式存在,允许存储任意类型的数据。
是一个动态数组,提供了快速的随机访问能力,同时允许在两端进行高效的插入和删除操作。
要使用deque,需包含头文件
创建deque
插入元素 1 2 myDeque.push_back (10 ); myDeque.push_front (5 );
访问元素 1 2 3 4 5 for (int i = 0 ; i < myDeque.size (); i++) { cout << myDeque[i] << " " ; } myDeque.front (); myDeque.back ();
删除元素 1 2 myDeque.pop_back (); myDeque.pop_front ();
实例1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <iostream> #include <deque> int main () { std::deque<int > myDeque; myDeque.push_back (10 ); myDeque.push_back (20 ); myDeque.push_front (5 ); std::cout << "Deque contains: " ; for (int i = 0 ; i < myDeque.size (); ++i) { std::cout << myDeque[i] << " " ; } std::cout << std::endl; myDeque.pop_back (); myDeque.pop_front (); std::cout << "Deque after popping: " ; for (int i = 0 ; i < myDeque.size (); ++i) { std::cout << myDeque[i] << " " ; } std::cout << std::endl; return 0 ; }
实例2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <iostream> #include <deque> int main () { std::deque<int > d; d.push_back (10 ); d.push_back (20 ); d.push_front (5 ); std::cout << "Front element: " << d.front () << std::endl; std::cout << "Back element: " << d.back () << std::endl; d.front () = 15 ; d.back () = 25 ; std::cout << "Modified front element: " << d.front () << std::endl; std::cout << "Modified back element: " << d.back () << std::endl; return 0 ; }
关联容器 map 查找类操作
成员函数
功能
示例
find(key)
查找键,返回迭代器
auto it = map.find("key");
count(key)
统计键的出现次数(0或1)
if (map.count("key") > 0) { ... }
contains(key)
C++20 新增,返回是否存在键
if (map.contains("key")) { ... }
lower_bound(key)
返回第一个不小于 key 的迭代器
auto it = map.lower_bound(42);
upper_bound(key)
返回第一个大于 key 的迭代器
auto it = map.upper_bound(42);
equal_range(key)
返回匹配键的范围迭代器对
auto [beg, end] = map.equal_range(42);
map.contains()需要C++20
插入/删除类操作
成员函数
功能
示例
insert(value)
插入元素(自动去重)
map.insert({"key", 42});
emplace(args...)
原地构造元素
map.emplace("key", 42);
erase(key/iterator)
删除元素
map.erase("key");
merge(other)
C++17 合并两个容器
map1.merge(map2);
set