首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >STL_vector

STL_vector

作者头像
GeekLiHua
发布2025-01-21 13:16:17
发布2025-01-21 13:16:17
1220
举报
文章被收录于专栏:JavaJava

STL_vector

简介

vector属于动态数组,类比于Java里面的ArrayList,本文旨在为读者讲解最常用的vector的函数,与一些使用技巧,作者为算法工程师,所以比较偏向于算法题的写法。

常用方法

vector的定义
方法一
代码语言:javascript
复制
// 定义具有10个int类型元素的向量,不具备初始值
vector<int> v(10);
方法二
代码语言:javascript
复制
// 定义具有10个int类型的元素,初始全为1
vector<int>v(10, 1);
方法三
代码语言:javascript
复制
// 拷贝构造,将v0的内容拷贝构造到v中
vector<int>v(v0);
方法四
代码语言:javascript
复制
// 将向量v0中的0-5的元素赋值给v,两个向量需要类型相同
// 这里涉及到vector的一个方法begin(),对应的还有end(),begin()代表vector的第一个元素
// end()代表最后一个元素的后一位的指针
vector<int>v(v0.begin(), v.begin() + 5); // 一共5个元素
方法五
代码语言:javascript
复制
// 从数组中获取初始值
int v0[3] = {0, 1, 2};
vector<int> v(v0, v0 + 3);
vector的遍历
方式一

按照数组下标式遍历

代码语言:javascript
复制
#include<iostream>
#include<vector>
using namespace std;

int main()
{
    vector<int> v(10, 1);
    for (int i = 0; i < v.size(); ++ i) // size()函数为获取容器的大小,每个容器都有的
    {
        cout << v[i] << " ";
    }
    // 运行结果:
    // 1 1 1 1 1 1 1 1 1 1 
    return 0;
}
方式二

auto遍历(新语法devc++可能需要调成c++11才能用)

代码语言:javascript
复制
#include<iostream>
#include<vector>
using namespace std;

int main()
{
    vector<int> v(10, 1);
    for (auto x : v) // x为当前的值,v为容器
    {
        cout << x << " ";
    }
    // 运行结果:
    // 1 1 1 1 1 1 1 1 1 1 
    return 0;
}
方式三

迭代器遍历

代码语言:javascript
复制
#include<iostream>
#include<vector>
using namespace std;

int main()
{
    vector<int> v(10, 1);
    // 不推荐 比较长 不适合搞算法题
    for (vector<int>::iterator it = v.begin(); it != v.end(); ++ it) 
    {
        // it为指针
        cout << *it << " ";
    }
    // 运行结果:
    // 1 1 1 1 1 1 1 1 1 1 
    return 0;
}
push_back()与pop_back()

void push_back(T x):给向量最后的位置加一个元素

void pop_back():弹出向量最后一个元素

代码语言:javascript
复制
#include<iostream>
#include<vector>
using namespace std;


int main()
{
    vector<int> v(10, 1);
    // push_back()前	
    for(auto it : v)
    {
        cout << it << " ";
    }
    cout << endl;
    // 运行结果
    // 1 1 1 1 1 1 1 1 1 1 
    
    
    // push_back()后
    v.push_back(10);
    for(auto it : v)
    {
        cout << it << " ";
    }
    cout << endl;
    // 运行结果
    // 1 1 1 1 1 1 1 1 1 1 10 
    
    // pop_back()后
    v.pop_back();
    v.pop_back();
    for(auto it : v)
    {
        cout << it << " ";
    }
    // 运行结果
    // 1 1 1 1 1 1 1 1 1 
    return 0;
}
front()与back()

T front():获取容器中第一个元素

T back(): 获取容器中最后一个元素

代码语言:javascript
复制
#include<iostream>
#include<vector>
using namespace std;


int main()
{
    int v0[5] = {1, 2, 3, 4, 5};
    vector<int> v(v0, v0 + 5);
    cout << "第一个元素为:" << v.front() << endl;
    cout << "最后一个元素为:" << v.back() << endl;
    // 运行结果
    /*
    第一个元素为:1
    最后一个元素为:5
    */
    
    // vector支持下标访问 也可以这样
    cout << "第一个元素为:" << v[0] << endl;
    cout << "最后一个元素为:" << v[v.size() - 1] << endl;
    // 运行结果
    /*
    第一个元素为:1
    最后一个元素为:5
    */
    return 0;
}
排序sort()
默认排序
代码语言:javascript
复制
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;


int main()
{
    int v0[9] = {1, 5, 1, 0, -1, -666, 8, 994, 456};
    vector<int> v(v0, v0 + 9);
    cout << "排序前:";
    for (auto x : v) cout << x << " ";
    cout << endl;
    
    // 运行结果:
    // 排序前:1 5 1 0 -1 -666 8 994 456 
    
    
    cout << "排序后:";
    sort(v.begin(), v.end()); // 可以控制范围,可以对v部分排序,我这里是对整个vector排序 默认升序排序
    for (auto x : v) cout << x << " ";
    cout << endl;
    // 运行结果:
    // 排序后:-666 -1 0 1 1 5 8 456 994 
    return 0;
}
自定义排序

这基本上是sort()的内容

代码语言:javascript
复制
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool compare(int a, int b) {
    return a > b;//降序排列
}


int main()
{
    int v0[9] = {1, 5, 1, 0, -1, -666, 8, 994, 456};
    vector<int> v(v0, v0 + 9);
    cout << "排序前:";
    for (auto x : v) cout << x << " ";
    cout << endl;
    
    // 运行结果:
    // 排序前:1 5 1 0 -1 -666 8 994 456 
    
    
    cout << "排序后:";
    // 可以控制范围,可以对v部分排序,我这里是对整个vector排序
    sort(v.begin(), v.end(), compare); 
    for (auto x : v) cout << x << " ";
    cout << endl;
    // 运行结果:
    // 排序后:994 456 8 5 1 1 0 -1 -666 
    return 0;
}
reverse()

翻转函数

代码语言:javascript
复制
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool compare(int a, int b) {
    return a > b;//降序排列
}


int main()
{
    int v0[9] = {1, 5, 1, 0, -1, -666, 8, 994, 456};
    vector<int> v(v0, v0 + 9);
    cout << "翻转前:";
    for (auto x : v) cout << x << " ";
    cout << endl;
    // 运行结果:
    // 翻转前:1 5 1 0 -1 -666 8 994 456 
    
    reverse(v.begin(),v.end());
    cout << "翻转前:";
    for (auto x : v) cout << x << " ";
    cout << endl;
    // 运行结果:
    // 翻转前:456 994 8 -666 -1 0 1 5 1 
    return 0;
}
find()

vector的一段区间里面寻找一个元素,不包括右边界,如果找到了返回第一次出现的指针,没有找到返回```null``

代码语言:javascript
复制
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool compare(int a, int b) {
    return a > b;//降序排列
}


int main()
{
    int v0[9] = {1, 5, 1, 0, -1, -666, 8, 994, 456};
    vector<int> v(v0, v0 + 9);
    vector<int>::iterator it = find(v.begin(), v.end(), 100);
    cout << *it << endl;
    // 运行结果
    // 0 // 0代表空指针
    
    
    it = find(v.begin(), v.end(), 1);
    cout << *it << endl;
    // 运行结果
    // 1 // 1代表第一个位置的指针
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • STL_vector
    • 简介
    • 常用方法
      • vector的定义
      • vector的遍历
      • push_back()与pop_back()
      • front()与back()
      • 排序sort()
      • reverse()
      • find()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档