文章目录
C++ STL 基础
STL: Standard Template Library;
STL的常规操作:查询,插入,删除,修改;
- 在C++中使用标准模板库提供的容器,需要加入相应的头文件,并且使用命名空间
std
; - 容器适配器头文件:
queue; stack;
- 容器头文件:
vector; dqueue; list; map; set;
vector
vector:支持随机访问的数组类型,它是可变大小的;
初始化
std::vector<type> name;
std::vector<type> name(size); //明确size;
std::vector<type> name(size, value); //所有元素指定初始值value;
std::vector<type> name(current_vector); //复制构造函数;
std::vector<type> name(first, last); //创建在first 和last之间的向量;
常用成员函数
Reference: https://blog.youkuaiyun.com/virtualdesk/article/details/4353836
deque
deque 是一种双端队列,提供了在序列两端快速插入和删除操作的功能,支持随机访问;
初始化
std::deque<type> name;
std::deque<type> name(size); //明确size;
std::deque<type> name(size, value); //所有元素指定初始值value;
std::deque<type> name(current_deque); //复制构造函数;
std::deque<type> name(first, last); //创建在first 和last之间的向量;
成员函数
Reference: https://blog.youkuaiyun.com/jianpeng5/article/details/24591101
list
list:双向链表容器,不支持随机访问,访问list中的元素需要从链表某个端点开始,插入和删除花费时间固定,和链表中的位置无关;
初始化
std::list<type> name;
std::list<type> name(size); //明确size;
std::list<type> name(size, value); //所有元素指定初始值value;
std::list<type> name(current_list); //复制构造函数;
std::list<type> name(first, last); //创建在first 和last之间的向量;
成员函数
Reference: https://zh.cppreference.com/w/cpp/container/list
其他
list中的迭代器不支持+
运算符;
list遍历元素一般使用迭代器;
using namespace std;
int array[10] = {1, 3, 5};
list<int> list_1(array, array+3);
list<int>::iterator iter = list_1.begin();
//上边和下边的代码关系不是很大;
for(auto it = list_1.begin(); it !=list_1.end(); it++)
{
std::cout << " " << *it;
}
set
set是结合容器的一种,一个set像链表一样顺序地存储一组值,在一个set中,元素是存储的数据,同时也是数据的键值;
结合容器包括:set, multiset, map, multimap, hash table;
初始化
std::set<type, predicate> name;
std::set<type, predicate> name(current_set);
std::set<type, predicate> name(first, last);
//predicate: A predicate is simply a function that returns true or false depending on whether its input(s) satisfy some condition;
//example;
std::set< int, std::less<int> > int_set;
成员函数
c++ stl容器set成员函数:
function | 用途 |
---|---|
begin() | 返回指向第一个元素的迭代器 |
clear() | 清除所有元素 |
count() | 返回某个值元素的个数 |
empty() | 如果集合为空,返回true |
end() | 返回指向最后一个元素的迭代器 |
equal_range() | 返回集合中与给定值相等的上下限的两个迭代器 |
erase() | 删除集合中的元素 |
find() | 返回一个指向被查找到元素的迭代器 |
get_allocator() | 返回集合的分配器 |
insert() | 在集合中插入元素 |
lower_bound() | 返回指向大于(或等于)某值的第一个元素的迭代器 |
key_comp() | 返回一个用于元素间值比较的函数 |
max_size() | 返回集合能容纳的元素的最大限值 |
rbegin() | 返回指向集合中最后一个元素的反向迭代器 |
rend() | 返回指向集合中第一个元素的反向迭代器 |
size() | 集合中元素的数目 |
swap() | 交换两个集合变量 |
upper_bound() | 返回大于某个值元素的迭代器 |
value_comp() | 返回一个用于比较元素间的值的函数 |
multiset
和set不同的地方在于,multiset可以包含重复的数据;
multiset的初始化
std::multiset<type, predicate> name;
std::multiset<type, predicate> name(current_multiset);
std::multiset<type, predicate> name(first, last);
map
map: 按照顺序存储一组值,map中的键和值是分开的;
初始化
std::map<key, type, predicate> name;
std::map<key, type, predicate> name( current_map );
std::map<key, type, predicate> name( first, last );
// example;
std::map<int, int, std::less<int> > int_map;
成员函数
Reference: https://zh.cppreference.com/w/cpp/container/map/at
multimap
同multiset;
不可以使用[]
操作符向多重映射中插入元素;
STL 算法
包含四种:非修正序列算法,修正序列算法,排序算法,数值算法;
迭代器
Example:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> int_vec(5);
vector<int>::iterator iter = int_vec.begin();
for(int count = 1; iter != int_vec.end(); iter++, count++)
{
*iter = count;
}
return 0;
}