C++ STL详解(二)STL经典容器之vector

2 篇文章 0 订阅
2 篇文章 0 订阅

目录

简介

基本功能介绍

头文件

基本用法

常用功能

实用方法

遍历


前言?没有前言,直接进入正题吧。

今天要和大家讲的是STL中最常用,最强大的STL容器——vector。

简介

vector,直译过来就是向量,意为动态数组。它是STL中最强大,最实用且常用的容器。其实际用途很高,在有些场景或范围下,可以直接代替数组,所以被我们挚爱。

vector的实际用法很多,可以动态分配内存,比数组灵活,大小不限,可插可删,对于我们这种C++党的人来说就是一个天大的福利!而且十分好用。

基本功能介绍

头文件

#include <vector>

#include <bits/stl_vector.h>

诶,等一下,这是不是闲的啊?[滑稽]

#include <bits/stdc++.h>

直接这个不就行了吗?

注意:vector容器是在std里的,所以一定要有using namespace std;这行语句。

基本用法

//注意:创建时不指定大小时长度默认为0,也就是空的
vector<int> v; //创建一个int类型的vector
vector<double> v; //创建一个double类型的vector
vector<string> v; //创建一个string类型的vector

//创建一个二维int类型的vector
vector<vector<int> > v; //或
vector<vector<int>> v;
//注意,在C++98之前,要用上面第一种写法,因为下面的写法可能会被误识别成右移运算符。

vector<int> v(100); //定义100个元素大小的int类型vector
vector<int> v(100,1); /定义100个元素大小的int类型的vector,并赋初值为1

常用功能
 

begin();                    //头指针
rbegin();                   //反向的,同上
end();                      //尾指针
rend();                     //反向的,同上
push_back(x);               //在末尾插入元素
pop_back();                 //在末尾弹出元素
operator[]                  //访问下标位置的元素
erase(pos);                 //在pos位置删除元素
erase(pos,num);             //在pos位置删除num个元素
insert(pos,num);            //在pos位置插入num
size();                     //该vector的长度
empty();                    //判断是否为空
clear();                    //清空
resize(len);                //重置长度

begin():返回vector的头部迭代器。

end():返回vector的尾部迭代器。

rbegin()和rend():同上

push_back():这个……用代码解释吧……

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int> v;
    v.push_back(123);
    for(int i : v) cout << i; //这个后面会讲
    return 0;
}

输出结果:

123

pop_back():同上,用代码解释。

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int> v;
    v.push_back(21);
    v.push_back(123);
    for(int i : v) cout << i << " ";
    cout << endl;
    v.pop_back();
    for(int i : v) cout << i << " ";
    return 0;
}

输出结果:

21 123
21

operator[]:这应该是所有STL容器中最强大的功能之一了(迭代器除外),因为vector中已经帮你把[]重载了,所以非常方便。

例:

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int> v;
    v = {1,2,3,4,5,5,4,3,2,1};
    for(int i=0; i<v.size(); i++) printf("数组下标为%d的值为:%d\n",i,v[i]);
    return 0;
}
数组下标为0的值为:1
数组下标为1的值为:2
数组下标为2的值为:3
数组下标为3的值为:4
数组下标为4的值为:5
数组下标为5的值为:5
数组下标为6的值为:4
数组下标为7的值为:3
数组下标为8的值为:2
数组下标为9的值为:1


erase():它的功能是删除字符串,有两种用法。只填一个参数pos时,删除pos之后的所有元素;填两个参数pos,n时,删除pos之后n个元素。

例:

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int> v;
    v = {4,12,6,2,6,1};
    v.erase(4);
    cout << "删除下标为4的元素后:";
    for(int i:v) cout << i << " ";
    return 0;
}

运行结果:

删除下标为4的元素后:4 12 6 2 1


insert():在pos下标处插入num。

代码类似,so,同上。

size():获取vector长度。

例子的话……我也不知道该怎么写了……

empty():判断是否为空。

其他不解释。

clear():清空数组。

不解释。

resize():重置vector的长度。

还是不解释。

实用方法

遍历

下标访问:

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int< v;
    v = {1,2,3,4,5,6,7};
    for(int i=0; i<v.size(); i++){
        cout << v[i] << " ";
    }
    return 0;
}


迭代器访问(不建议使用):
 

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int> v;
    v = {1,2,3,4,5,6,7);
    for(vector<int>::iterator it=v.begin(); it!=v.end(); it++){
        cout << *it << " ";
        //注意这里一定要加个*,否则会报错的。
    }
    return 0;
}

为什么不建议,因为太费手了!(难写)


迭代器(优化):
 

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int> v;
    v = {1,2,3,4,5,6,7};
    for(auto it=v.begin(); it!=v.end(); it++){
        cout << *it << " ";
    }
    return 0;
}

优化就优化在了简写。


for_each遍历:
 

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    vector<int> v;
    v = {1,2,3,4,5,6,7};
    for(auto i : v){
        cout << i << " ";
    }
    return 0;
}

上面三个的运行结果:

1 2 3 4 5 6 7 

结语

这期STL讲解就到这里,我们下期再见,拜了个拜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值