要注意的问题:
1. 在使用unique_copy()函数之前,一定要使用sort()函数进行排序,否则得不到正确的结果。因为unique_copy()函数的原来删除相邻的相同元素。
2.使用meger()函数合并两个数列的时候,也要在之前用sort()进行排序。li1.sort(); li2.sort(); li1.merge(li2);
3.STL容器分两种,序列式容器(vector/list/deque/stack/queue/heap),及关联式容器。关联式容器又分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)/multimap(多键映射表),这些容器均以RB-tree完成。
一、stack
#include <stack>
namespace std {
template <class T, class Container = deque<T> >
class stack;
}
===========
第一个template参数代表元素类别。带有默认值的第二个template参数用来定义stack内部存放元素所用的实际容器。
缺省采用deque。
std::stack<int> st;
//interger stack
实际上stack只是很简单地把各项操作转化为内部容器的对应调用。你可以使用任何序列式容易来支持stack,只要它们支持back(),push_back(),pop_back(),等动作就行。可以使用vector或list容器来容纳元素:
std::stack<int, std::vector<int> > st;
===
三个核心成员函数:
push()会将一个元素置于stack内。
top()会返回stack内的下一个元素。
pop()会从stack中移除元素。
可以用size()和empty()来检验容器是否为空.
====
使用例子:
#include <stack>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
stack<int> st;
st.push(1);
st.push(2);
st.push(3);
cout<<st.top()<<" ";
st.pop();
cout<<st.top()<<" ";
st.pop();
//modify top elements
st.top() = 77;
st.push(4);
st.push(5);
cout<<"\nsize:"<<st.size()<<"\n";
st.pop();
while ( !st.empty() ) {
cout<<st.top()<<" ";
st.pop();
}
cout<<endl;
return 0;
}
二、queue
#include <queue>
namespace std {
template <class T, class Container = deque<T> >
class queue;
}
===========
第一个template参数代表元素类别。带有默认值的第二个template参数用来定义queue内部存放元素所用的实际容器。
缺省采用deque。
std::stack<std::string> buffer; //interger queue
实际上queue只是很简单地把各项操作转化为内部容器的对应调用。你可以使用任何序列式容易来支持queue,只要它们支持front(),back(),push_back(),pop_front(),等动作就行。可以使用list容器来容纳元素:
std::queue<int, std::list<std::string> > buffer;
===
三个核心成员函数:
push()会将一个元素置于queue内。
front()回返回queue内的下一个元素(也就是第一个被置入的值)
back()返回最后一个元素
pop()会从queue中移除元素。清除第一个元素 (出队)
size()
empty()
===
可以用size()和empty()来检验容器是否为空.
====
使用例子:
#include <queue>
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
queue<string> q;
q.push("these ");
q.push("are ");
q.push("more than ...");
//read and print
cout << q.front();
q.pop();
cout<<q.front();
q.pop();
//insert two new elements
q.push("four ");
q.push("words! ");
q.pop();
//skip and print
cout<<q.front();
q.pop();
cout<<q.front()<<endl;
q.pop();
//print number of elements in the queue
cout<<"number of elements in the queue: "<<q.size()<<endl;
return 0;
}