您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页c++进阶——STL容器的基本介绍和基本使用

c++进阶——STL容器的基本介绍和基本使用

来源:二三娱乐

vector的基本使用

#include<vector>
using namespace std;
void main(){
    //vector
    vector<int> v;
    //插入
    //v.begin迭代器的开始的位置
    v.insert(v.begin(),12);
    v.insert(v.begin(), 22);
    v.insert(v.begin(), 2);
    //插到尾
    v.insert(v.end(), 92);
    //修改第一个位置的值
    v.front() = 102;
    //最后的数据修改
    v.back() = 93;
    //放到最后位置
    v.push_back(55);
    //移除最后一个元素
    v.pop_back();
     //通过迭代器进行移除
    v.erase(v.begin());
    //获取数据
    //若越界会崩溃
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << "\t";
    }
    cout << endl;
    //若越界会抛异常
    for (int i = 0; i < v.size(); i++){
        cout << v.at(i)<<"\t";
    }
    cout << endl;
    //通过迭代器取值
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++){
        cout << *it << "\t";
    }
    cout << endl;
    getchar();
}

stack容器

#include<stack>
using namespace std;
void main(){
    stack<int> s;
    //入栈
    s.push(12);
    s.push(16);
    s.push(72);
    //取出,for和迭代器都不可以
    int top =s.top();
    cout << top << endl;
    //弹出栈顶
    s.pop();
    int top = s.top();
    cout << top << endl;
    getchar();
}

队列

#include<queue>
using namespace std;
void main(){
    queue<int> q;

    //存放数据
    q.push(12);
    q.push(22);
    q.push(32);
    q.push(52);
    //修改第一个位置的值
    q.front() = 2;
    //取数据
    cout << q.front() << endl;
    //弹出
    q.pop();
    //cout << q.front() << endl;
    //最后一位数
    cout << q.back() << endl;
    //循环
    while (!q.empty()){
        cout << q.front() << endl;
        q.pop();
    }
    getchar();
}
//优先级队列
void main(){
    priority_queue<int> qq;
    qq.push(12);
    qq.push(22);
    qq.push(32);
    qq.push(52);
    //最大值
    cout << qq.top() << endl; 
    getchar();
}

list的增删改查

void main(){
    list<int>list1;
    //插入
    list1.push_front(12);
    list1.push_back(22);
    list1.insert(list1.begin(), 16);
    
    //修改
    list1.back() = 32;
    list1.front() = 2;
    //删除
    list1.erase(list1.begin());
    list1.pop_back();
    list1.pop_front();
    //不能通过角标访问或者修改
    //取值
    for (list<int>::iterator i=list1.begin(); i !=list1.end(); i++)
    {
        cout << *i << endl;
    }
    getchar();
}

set集合的使用:set会对你传入的参数进行排序,不允许元素相同

#include<functional>//因为用了greater<int>()
void main(){
    //set<int,less<int>> s;//默认是这个,就是从小到大排序
    set<int, greater<int>> s;//从大到小
    //添加参数,不需要迭代器也不需要指定位置
    s.insert(12);
    s.insert(45);
    s.insert(13);
    //重复插入不会报错
    //第一个参数,插入的位置,第二个参数是否插入成功
    pair<set<int,greater<int>>::iterator,bool> res=  s.insert(45);
    bool isSucceed=res.second;
    if (isSucceed){
        cout << "插入成功" << endl;
    }
    else{
        cout << "插入失败" << endl;
    }
    for (set<int>::iterator i = s.begin(); i != s.end(); i++)
    {
        cout << *i << endl;
    }
    getchar();
}

谓词(函数谓词):按特定的规则所编写的函数谓词

class Student{
public:
    string name;
    int grade;
public:
    Student(string name, int grade){
        this->name = name;
        this->grade = grade;
    }
};
//谓词(函数谓词):按特定的规则所编写的函数谓词
bool compare(const Student& left, const Student& right){
    return left.grade > right.grade;
}
//函数对象
struct comparefuction
{
    bool operator()(const Student& _Left, const Student& _Right) const
    {   
        return (_Left.grade > _Right.grade);
    }
};
void main(){
    set<Student, comparefuction > s;//从大到小
    Student s1("Peakmain", 5);
    Student s2("Treasure", 51);
    Student s3("Body",7);
    s.insert(s1);
    s.insert(s2);
    s.insert(s3);
    //输出
    for (set<Student>::iterator it = s.begin(); it != s.end(); it++){
        cout << it->name.c_str() << endl;
        cout << it->grade  << endl;
    }
    getchar();
}

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务