C++ STL

总结

  • 序列容器Vector,deque,list
  • 关联容器 map set
  • 容器适配器: 是对前面提到的某些容器vector进行包装,使其变成另外一个容器
    如stack,queue

1.序列容器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 如果程序要求随机访问元素,则用vector或者deque
  • 如果程序必须在容器中间位置插入或删除元素,用list
  • 如果程序不是在容器的中间位置,而是在容器的首部和尾部插入或删除元素则用deque

vector

动态数组的封装,可以用下标访问
vec容器可以存放多种数据类型
在这里插入图片描述

------------构造方法-------------------------
vector<int> vec(10,0//创建容量为10的vector,并初始化为0
vector<int> vec = {1,4,8}
vector<int> vec2(vec)  //copy constructor, vec2: {1,4,8}
二维初始化
vector<vector<int>> vec(size1, vector<int>(size2, 0));
----------Modifiers--------------------
vec.push_back(4); //尾部插入
vec.insert(v1.begin()+2,0); //插入0至vec[2]
vec.pop_back();  //移除最后一个元素
vec.erase (vector.begin()+5);
vec.erase (myvector.begin(),myvector.begin()+3);
vec.clear();   //全部删除
----------Element access--------------------
vec[0];
vec.front();
vec.back();
----------Capacity--------------------
vec.size();   //vector元素数量大小
vec.empty();
------------常用算法---------------------------
//需要配合 #include <algorithm>算法
it = vec.find(first迭代器,last迭代器,val) // [first,last)
if(it != vec.end()) //找到了 
------------------------------------------------------------------------
for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
	cout << *it <<endl;
sort(vec.begin(),vec.end());
for(int i : vec)  cout << i << endl;
for(int i = 0; i < vec.size(); i++) cout << vec[i] << endl;
  • fast insert/remove at the end: O(1)
  • slow insert/remove at the begin or int the middle: O(n)
  • slow search: O(n)

deque

在这里插入图片描述

deque<int> deq  = {3,4,6};
----------Modifiers--------------------
deq.push_front(2);
deq.pop_front();
deq.push_back(9);
deq.pop_back();
deq.clear();
----------Capacity--------------------
deq.empty();
deq.size();
----------Element access--------------------
deq[0];  //可以当做数组使用
deq.front();
deq.back();
  • fast insert/remove at the begining and the end O(1);
  • slow insert/remove in the middle: O(n)
  • slow search: O(n)

list

双向链表
在这里插入图片描述

list<int> li = {1,2,3};
li.push_back(6);
li.push_front(0);
li.pop_front();
li.pop_back();
li.clear();
----------Element access--------------------
li.front();
li.back();
----------Capacity--------------------
li.size();
li.empty();
  • fast insert/remove at any place: O(1)
  • slow serarch:O(n)
  • no random access, no [] operator

2.关联容器

在这里插入图片描述
二叉平衡树(红黑树)
在这里插入图片描述

set

set<int> st;
st.isnert(1);
st.earse(迭代器  或  value); 
st.erase(iterator first, iterator last);
st.erase(st.find(50)); // find返回一个迭代器
st.clear();
----------Capacity--------------------
st.empty();
st.size();

example

// erasing from set
#include <iostream>
#include <set>
int main (){
  set<int> myset;
  set<int>::iterator it;
  for (int i=1; i<10; i++) myset.insert(i*10);  // 10 20 30 40 50 60 70 80 90
  it = myset.begin();
  ++it;                                         // "it" points now to 20

  myset.erase (it);
  myset.erase (40);

  it = myset.find (60); //删除[60,st.end)
  myset.erase (it, myset.end());

  return 0;
}

map

在这里插入图片描述

map<int,string> mmp;
pair<int,string> p(1,"tom");
mmp.insert(p);    //插入
mmp[2] = "jack";  //插入
mmp.insert(pair<int,string>(1,"tom"));
------------------------------------------
it = mmp.find(key);
mmp.erase(key);
mmp.clear();
for(auto& it : mmp)
	cout << it.first << " " << it.second << endl;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.其他(容器适配器)

在这里插入图片描述
在这里插入图片描述

stack

queue和stack一样都没有迭代器

stack<int> s;
s.push(1);
s.pop();
----------Capacity--------------------
s.size();
s.empty();
----------Element access--------------------
int top = s.top();

queue

queue<int> q;
q.push(1); //入队
q.pop(); //出队
----------Capacity--------------------
q.empty();
q.size();
----------Element access--------------------
q.front(); //队首元素
q.back(); //队尾元素

string

	string str;
	getline(cin,str); //读入一行,包括空格
	cout << str << endl;
	string s1 = "kcl";
	string s2 = "2020";
	s1.append(s2); // kcl2020
	int len1 = s1.length();
	int len2 = s2.length();
	s1.erase(len1-len2,len1); // 把下标i到j的元素清除[i,j)
	cout << s1 << endl;  // kcl
	cout << s1.find('c') << endl;  //1
	cout << s1.find('c',1) << endl; //从下标1开始查找'c'

4.erase总结

在这里插入图片描述

5.find()总结

序列容器没有find方法,需要配合 algorithm头文件使用
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值