1、vector的基本用法  #include<vector>

(1)定义:

vector<int>S;定义一个空的vector对象,存储的是int类型的元素。

vector<int>S(n);定义一个含有n个int元素的vector对象。

(2)基本操作:

S[i];直接以下标方式访问容器中的元素。

S.front();返回首元素。

S.back();返回尾元素。

S.size();返回表长。

S.empty();当表为空时返回true,否则返回false。

S.pop_back();删除表尾元素。

S.begin();返回指向首元素的迭代器。

S.end();返回指向尾元素的迭代器。

S.insert(it , x);向迭代器it指向的元素前插入新元素 x。

S.insert(it , n , x);向迭代器it指向的元素前插入n个新元素x。

S.insert(it , first , lase);将由迭代器first和last所指定的序列[first , last)插入到迭代器it所指向的元素前面。

S.erase(it);删除由迭代器it指向的元素。

S.erase(first , last);删除由迭代器first和last所指定的序列[first , last)。

S.reserve(n);预分配缓冲空间,使存储空间至少可容纳n个元素。

S.resize(n);改变序列的长度,超出的元素将全被删除,如果序列需要扩展(原空间小于n),元素默认值将填满扩展出的空间。

S.resize(n , val);改变序列的长度,超出的元素将全被删除,如果序列需要扩展(原空间小于n),元素val将填满扩展出的空间。

S.clear();删除容器中的所有元素。

S1.swap(S2);容器S1、S2互换。

S.assign(first , last);将序列替换成由迭代器first和last所指定的序列[first , last)。[first , last)不能是原序列中的一部分。

 

2、stack的基本用法  #include<stack>

(1)定义:

stack<int>S;

stack<string>S;

(2)基本操作:

S.push(x);x入栈。

S.pop();出栈(删除栈顶元素,不返回)。

S.top();访问栈顶元素。

S.empty();判断栈是否为空(空时返回true,否则返回false)。

 

3、queue的基本用法  #include<queue>

(1)定义:

queue<int>Q;

queue<double>Q;

(2)基本操作:

Q.push(x);x入队。

Q.pop();出队(弹出队列第一个元素,不返回)。

Q.front();访问队首元素。

Q.back();访问队尾元素。

Q.empty();判断队列是否为空(空时返回true,否则返回false)。

Q.size();返回队列中元素的个数。

 

4、priority_queue的基本用法  #include<queue>

<queue>头文件中,还定义了另一个非常有用的模板类priority_queue(优先队列)。优先队列与队列的差别在于优先队列不是按照入队的顺序出队,而是按照队列中元素的优先权顺序出队(默认为大者优先,也可以通过指定算子来指定自己的优先顺序)。 

priority_queue模板类有三个模板参数,第一个是元素类型,第二个容器类型,第三个是比较算子。其中后两个都可以省略,默认容器为vector,默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)。 

(1)定义:

从大到小输出:priority_queue<int>pq;

从小到大输出:priority_queue<int, vector<int>, greater<int> >pq;

注意两个尖括号之间一定要留空格。

(2)基本操作:和queue相同。

(3)自定义:priority_queue<node>pq;

struct node //先按x升序,再按y升序

{

    friend bool operator< (node n1, node n2)

    {

为什么是 > 因为出队是从尾部先出的

        if(n1.x==n2.x&&n1.y>n2.y) return true;

        return false;

    }

    int x,y;

}; 

 

5、map基本用法  #include<map>

(1)定义:

map<string , int>m;

(2)插入元素:

m[key]=value;

m.insert(make_pair(key,value));

(3)查找元素:

int i = m[key];注意:当与该键值匹配的值不存在时,会创建键值为key的元素对。

map<string , int>::iterator it = m.find(key);如果map中存在与key相匹配的键值时,find操作将返回指向该元素对的迭代器,否则返回的迭代器等于map的end()。

(4)删除元素:

m.erase(key);删除与指定key键值相匹配的元素对,并返回被删除的元素的个数。

m.erase(it);删除由迭代器it所指定的元素对,并返回指向下一个元素对的迭代器。

 

6、set、multiset、map、multimap功能相似(以set为例)

Iterators:

begin()  end()  rbegin()  rend()
Capacity:
empty  size
Modifiers:
insert  erase    clear
swap           //set1.swap(set2) set1和set2互换
Operations:
find           //it = set1.find(key)          找到返回下标,否则返回set1.end()
count          //cnt = set1.count(key)        返回set1中 key 的个数
lower_bound    //it = set1.lower_bound(key)   大于或等于 key 的最小值的下标
upper_bound    //it = set1.upper_bound(key)   大于 key 的最小值的下标