STL 常见库函数

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的vector
void assign(n, elem);
void assign(begin, end);
将n个elem的拷贝复制给v
将[begin, end)区间的值赋给v
reference 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;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值