STL 常见库函数

来源:互联网 发布:编程基本算法 编辑:程序博客网 时间:2024/05/01 00:22

stack



  • 头文件    #include <stack>
  • 声明        stack<int> s;

void push( const T& value );向栈顶插入一个元素void pop();移除栈顶元素bool empty() const;检查栈是否为空size_type size() const;返回栈中元素的数量reference top();
const_reference top() const;更改栈顶元素
返回栈顶的元素






#include <iostream>#include <stack>using namespace std;int main() {    stack<int> s;    s.push(1);                      //将元素压入栈顶    s.push(2);    s.pop();                        //弹出栈顶元素    cout << s.empty() << endl;      //判断栈是否为空    cout << s.size() << endl;       //返回栈内的元素个数    s.top() = 2;                    //更改栈顶元素    cout << s.top() << endl;        //返回栈顶元素    return 0;}



queue


  • 头文件   #include <queue>
  • 声明       queue<int> q;

void push( const T& value ); 在队列尾插入一个元素void pop(); 删除队列首部的元素bool empty() const; 检查队列是否为空size_type size() const; 返回队列中元素的数量reference front(); 
const_reference front() const;更改队列首部元素
返回队列首部元素reference back(); 
const_reference back() const;更改队列尾部元素
返回队列尾部元素








#include <iostream>#include <queue>using namespace std;int main() {    queue<int> q;    q.push(1);                      //在队列尾插入一个元素    q.push(2);    q.pop();                        //删除队列首部的元素    cout << q.empty() << endl;      //检查队列是否为空    cout << q.size() << endl;       //返回队列中元素的数量    q.front() = 10;                 //更改队列首部元素    cout << q.front() << endl;      //返回队列首部元素    q.back() = 20;                  //更改队列尾部元素    cout << q.back() << endl;       //返回队列尾部元素    return 0;}


priority_queue


  • 头文件   #include <queue>
  • 声明       priority_queue<int> q;


void push( const T& value ); 向优先队列中插入一个元素void pop();删除优先队列首部的元素bool empty() const; 检查优先队列是否为空size_type size() const;返回优先队列中元素的数量const_reference top() const;返回优先队列首部的元素





#include <iostream>#include <queue>using namespace std;struct node{    int val;    bool operator<(const node & X) const {        return val > X.val;              //此时,队列中的元素是按照从小到达排序                                         // return val < X.val; 这时候按照从大到小排序    }    node(int val) {this->val = val;};};struct cmp{    bool operator()(const node & a, const node & b) {        return a.val < b.val;    }};int main() {    priority_queue<node> q;//  priority_queue<node, vector<node>, cmp> q;    声明同上    for (int i = 1; i < 10; ++i)        q.push(node(i));                //向优先队列中插入一个元素    cout << q.size() << endl;           //返回优先队列中元素的数量    while (!q.empty()) {                //检查优先队列是否为空        cout << q.top().val << endl;    //返回优先队列首部的元素        q.pop();                        //删除优先队列首部的元素    }    return 0;}



vector

  • 头文件  #include <vector>
  • 声明
  • vector<int> v;
  • vector<int> v(v1);
  • vector<int> v(ary + 2, ary + 5);
  • vector<int> v(10, 1);


vector<Elem> v;
vector<Elem> v(v1);
vector<Elem> v(begin, end);
vector<Elem> v(n, elem);创建一个空的vector
复制一个v1的vector
创建一个[begin, end)区间的vector
创建一个含有n个elem的vectorvoid assign(n, elem);
void assign(begin, end);将n个elem的拷贝复制给v
将[begin, end)区间的值赋给vreference at(size_type pos);传回索引pos所指的数据reference front(); 
const_reference front() const;传回第一个数据reference back(); 
const_reference back() const;传回最后一个数据iterator begin(); 
const_iterator begin() const;
reverse_iterator rbegin(); 
const_reverse_iterator rbegin() const;返回指向第一个元素的地址

传回一个逆向队列的第一个数据的地址iterator end(); 
const_iterator end() const;
reverse_iterator rend(); 
const_reverse_iterator rend() const;指向迭代器中的最后一个数据的下一个位置的地址

传回一个逆向队列的最后一个数据的下一个位置的地址v.insert(pos, elem);
v.insert(pos, n, elem);
v.insert(pos, begin, end);在pos位置插入一个elem拷贝
在pos位置插入n个elem拷贝
在pos位置插入[begin, end)的数据v.erase(pos);
v.erase(v.begin(), v.end());删除pos位置的数据
删除[v.begin(), v.end())的数据bool empty() const;判断容器是否为空size_type size() const;返回容器中实际数据的个数void push_back(const T& x);在容器尾部加入一个数据void pop_back();删除最后一个数据void clear();清空容器v1.swap(v2);
swap(v1, v2);将v1和v2互换
























#include <iostream>#include <vector>using namespace std;int main() {    int ary[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};    vector<int> v;                          //声明一个空的vector    vector<int> v1(v);                      //复制一个v的vector    vector<int> v2(10, 1);                  //v2中有10个元素,每个元素的值为1    vector<int> v3(ary + 1, ary + 4);       //v3中以区间[ary[1], ary[4])赋值    v.assign(ary, ary + 10);                //v中以区间[ary[0], ary[10])赋值    v1.assign(10, 2);                       //v1中有10个元素,每个元素的值为2    cout << v.at(1) << endl;                //输出v中在位置1中的元素    cout << v[1] << endl;                   //等同于上,不过他不会做位置越界的检查    cout << v.front() << endl;              //输出v中第一个位置的元素    v.front() = 100;                        //为第一个位置的元素赋值        v.back() = 200;                         //为v中最后一个元素赋值    cout << v.back() << endl;               //输出v中的最后一个位置的元素    v.insert(v.begin(), 10);                //在开头插入元素10    v.insert(v.begin(), 5, 2);              //在开头插入5个元素,每个元素为2    v.insert(v.begin()+2, ary+5, ary+6);    //在v[2]的位置开始插入[ary[5], ary[6])的元素    v.erase(v.begin() + 2);                 //删除v[2]    v.erase(v.begin(), v.begin() + 5);      //删除[v[0], v[5])元素    for (vector<int>::iterator itor = v.begin(); itor != v.end(); itor++)        cout << *itor << ' ';               //正向遍历vector数组 v    cout << endl;    for (vector<int>::reverse_iterator ritor = v.rbegin(); ritor != v.rend(); ritor++)        cout << *ritor << ' ';              //逆向遍历vector数组 v    cout << endl;    cout << v.size() << endl;               //输出vector数组中元素的个数    while (!v.empty())                      //判断v是否为空        v.pop_back();                       //删除v中最后一个元素    v1.clear();                             //清空vector数组v1    v.swap(v2);                             //交换v和v2    return 0;}







1 0
原创粉丝点击