STL容器简介

vector

  1. 数组的一种表示
  2. 强调数据的快速随机访问
  3. 提供了自动内存管理功能,可以动态改变vector对象的长度
  4. 提供对元素的随机访问
  5. 尾部添加/删除元素时间固定,头部或中间插入时间为线性复杂度
  6. 有反转容器,例如下面代码,显示的内容则是相互反序
for_each(vector.begin(), vector.end(), show);
for_each(vector.rbegin(), vector.rend(), show);

deque

  1. 双端队列
  2. 首位插入,时间固定
  3. 复杂度高于vector,即插入删除时间将高于vector
  4. 其他与vector相同,

list

  1. 双向链表
  2. 任意位置插入与删除,时间皆固定
  3. 强调快速插入、删除数据
  4. 不支持数组表示法与随机访问
void merge(list<T, Alloc>&x);//合并x到调用者
void splice(lterator pos, list<T, Alloc>&x);//插入x到pos前面
void insert(lterator pos, list<T, Alloc>&x);//复制x内容到pos位置
void remove(const T & val);
void sort();
void unique();//将连续两个相同元素压缩为单个元素

forward_list

  1. 单向链表
  2. 不可反转
  3. 正向迭代器

queue

  1. 适配器类
  2. 不允许随机访问
  3. 不允许遍历
  4. 从队尾添加
  5. 从队首删除
  6. 查看队尾/队首的值
  7. 检查元素数目
  8. 测试队列是否为空
bool empty()const;
size_type size()const;
T& fornt();
T& back();
void push(const T& x);
void pop()

priority_queue

stack

bool empty()const;
size_type size()const;
T& top();
void push(const T& x);
void pop()

set

  1. 关联容器
  2. 提供了对于元素的快速访问
  3. 不能指定插入元素位置
  4. 使用树形实现
  5. 键与值相同
  6. 元素不可重复
set_union(a.begin(), a.end(), b.begin(), b.end(), ostream_iterator<string, char> out(cout, ""));
set_union(a.begin(), a.end(), b.begin(), b.end(), insert_iterator<set<string>> (c, c.begin()));

mutiset

  1. 与set不同的在于其元素可以重复

map

multimap

  1. 可以反转
  2. 一个键可以与多个值关联
  3. 兼职类型不同
using namespace std;

typedef int KeyType;
typedef pair<const int, string> Pair;
typedef multimap<const int, string> Mapcode;

int main()
{
    
    
	Mapcode codes;
	codes.insert(Pair(110, "郑州"));
	codes.insert(Pair(110, "洛阳"));
	codes.insert(Pair(111, "泰州"));
	codes.insert(Pair(111, "苏州"));
	codes.insert(Pair(112, "广州"));
	codes.insert(Pair(112, "深圳"));

	Mapcode::iterator it;

	for (it = codes.begin(); it != codes.end(); ++it)
	{
    
    
		cout << (*it).first << "    " << it->second << endl;
	}
	cout << "==================" << endl;
	pair<Mapcode::iterator, Mapcode::iterator> range = codes.equal_range(111);
	cout << range.first->first << "    " << range.first->second << endl;
	cout << range.second->first << "    " << range.second->second << endl;
	cout << "==================" << endl;
	for (it = range.first; it != range.second; ++it)
	{
    
    
		cout << (*it).first << "    " << it->second << endl;
	}

}
110    郑州
110    洛阳
111    泰州
111    苏州
112    广州
112    深圳
==================
111    泰州
112    广州
==================
111    泰州
111    苏州

unordered_map

unordered_multimap

unordered_set

unordered_multiset

bitset

猜你喜欢

转载自blog.csdn.net/qq_34954047/article/details/127079173