STL之vector简单使用

1 篇文章 0 订阅

一、概述

针对顺序表的一些常用操作,来简单介绍一下C++STL中的vector容器

二、基本操作

1. 创建

#include <cstdio>
#include <iostream>
#include <vector> //必须加入的头文件 
using namespace std;

int main()
{
    //创建一个vector容器 
    vector<int> v;
    
    return 0;
}

2. 查看大小

2.1 size()
#include <cstdio>
#include <iostream>
#include <vector>  
using namespace std;

int main()
{
    vector<int> v;
    
    int v_size = v.size();      //查看vector容器存储元素的数量 
    
    printf("%d",v_size);
    
    return 0;
}
2.2 判空:empty()
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v; 
    
    //判空 
    if(v.empty())
        printf("vector为空\n");
    else
        printf("vector不为空\n");      
    
    return 0;
}

3. 增加元素

3.1 push_back( e(插入的元素) )
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    
    return 0;
}
3.2 insert(v.begin() + place(插入的位置,从0开始) , e(插入的元素) )
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //插入元素
    //在头部插入 
    v.insert(v.begin(), 11);
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //在中间插入
    v.insert(v.begin() + 4, 12);
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    
    return 0;
}

4. 删除元素

4.1 删除一个

(1) erase(v.begin() + place (删除元素的位置))

#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //删除一个元素
    v.erase(v.begin() + 4);
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    return 0;
}

(2) pop_back():删除尾部元素

#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //删除尾部元素元素
    v.pop_back();
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    return 0;
}
4.2 删除部分元素:erase(v.begin() + from, v.begin() + to) 注意:这里的删除的区间是左闭右开的
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //删除部分元素
    v.erase(v.begin() + 5, v.begin() + 10);
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    return 0;
}
4.3 删除全部元素:clear()
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //删除全部元素
    v.clear();
    printf("%d\n",v.size());
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    return 0;
}

5.修改元素

5.1 直接修改
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //修改元素
    v[0] = 11;
    v[v.size() / 2 - 1] = 12;
    v[v.size() - 1] = 13; 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    return 0;
}

6. 查看元素

6.1 front():查看第一个元素
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    printf("%d\n", v.front());      //查看第一个元素
    
    return 0;
}
6.2 back():查看最后一个元素
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    printf("%d\n", v.back());       //查看最后一个元素
    
    return 0;
}
6.3 find():查找指定值
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>    //要使用find()方法必须加入这个头文件 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    vector<int>::iterator it = find(v.begin(), v.end(), 5);     //若找到,返回该元素所在的迭代器位置,否则,返回v.end()
    
    if(it != v.end())
        printf("%d\n",*(it));   
    return 0;
}

当查找元素是结构体时

#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>    //要使用find()方法必须加入这个头文件 
using namespace std;

struct student{
    char name[7];
    int age;
    
    bool operator == (const student &s)		//必须重写 == 运算符
    {
        return !strcmp(this->name, s.name);
    }
};

int main()
{
    vector<student> stus;
    
    for(int i = 1; i <= 2; i++)
    {
        student s;
        scanf("%s %d",s.name, &s.age);
        stus.push_back(s);
    }
    
    student s;
    scanf("%s",s.name);     
    
    vector<student>::iterator it = find(stus.begin(), stus.end(), s);
    
    if(it != stus.end())
        printf("有此人");
    else
        printf("无此人");  
    return 0;
}

7. 遍历

7.1 迭代器遍历
#include <cstdio>
#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    vector<int>::iterator it;   //定义vector迭代器
    for(it = v.begin(); it != v.end(); it++)
        printf("%d ",*it);
        //若元素为结构体的话,则要采用这种形式:(*it).element
    
    return 0;
}

8. 排序

8.1 使用中的sort()函数
#include <cstdio>
#include <iostream>
#include <vector> 
#include <algorithm>	//必须加入的头文件
using namespace std;

typedef struct student{
    char name[4];
    int age;
}Student

bool compare(Student a, Student b)
{
    return a.age < b.age    //升序
    //return a.age > b.age  //降序
}
int main()
{
    vector<int> v;
    vector<Student> stus;
    
    for(int i = 1; i <= 10; i++)
    {
        v.push_back(i);
        Student s;
        s.age = i;
        stus.push_back(s);
    }
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //降序排序
    sort(v.begin(), v.end(), greater<int>());
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n"); 
    
    //升序排序
    sort(v.begin(), v.end());               //或者 sort(v.begin(), v.end(), less<int>()) 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //结构体排序,需要定义一个compare函数
    sort(stus.begin(), stus.end(), compare);
    
    return 0;
}

9. 翻转

9.1 使用中的reverse()函数
#include <cstdio>
#include <iostream>
#include <vector> 
#include <algorithm>	//必须加入的头文件
using namespace std;

int main()
{
    vector<int> v;
    
    for(int i = 1; i <= 10; i++)
        v.push_back(i);         //向尾部添加元素
    
    //显示 
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n");
    
    //翻转
    reverse(v.begin(), v.end());
    for(int i = 0; i < v.size(); i++)
        printf("%d ",v[i]);
    printf("\n"); 
    
    return 0;
}

参考文章

  1. C++ STL容器总结之vector(超详细版)
  2. ❤ 挑战C站最强C++ STL标准库总结(内含大量示例)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值