C++ STL之Vector容器

概述:

Vecotor是一个动态容器,支持随时插入和删除操作。在内存中是连续存储的,因此访问迅速。并且可以存储多种数据类型:int、指针、对象…

1. 包含的头文件

#include <vector>

2. 初始化

常见的初始化方式包括一维数组和二维数组
(1)一维数组:

vector<int> a; 
vector<string*> b;
vector<Base*> c;

vector<int> v(n);//长度为n的数组,初始值默认为0,idx=[0, n-1]
vector<int> v(n, 1);//v[0]到v[n-1]所有的元素初始值均为1
vector<int> a{1, 2, 3, 4, 5};//数组a中有五个元素,数组长度就为5

(2)二维数组:

vector<vector<int>>v;

3. 常用接口

成员函数释义
v.push_back(i)在尾部加一个数据,O(1)
v.pop_back()删除最后一个数据,O(1)
v.size()返回实际数据个数(unsigned类型),O(1)
v.begin()返回首元素的迭代器(通俗来说就是地址)O(1)
v.end()返回最后一个元素后一个位置的迭代器(地址)O(1)
v.empty()判断是否为空,为空返回真,反之返回假 O(1)
v.fornt()返回第一个数据,O(1)
v.back()返回数组中的最后一个数据 ,O(1)
v.clear()清除元素个数,O(N)
v.resize(n,i)改变数组大小为n,n个空间数值赋为i,如果没有默认赋值为0
v.insert(it, x)向任意迭代器it插入一个元素x ,O(N)
v.erase(first,last)删除[first,last)的所有元素,O(N)

4. 迭代访问

4.1 一维数组

(1)下标法:和普通数组一样,一维数组的下标是从0到v.size()−1,访问之外的数会出现越界错误

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

int main(){
    vector<int> v;
    for(int i = 0; i < 10; i++){
        v.push_back(i);
    }

    for(int i = 0; i < 10; i++){
        cout << v[i] << " ";
    }
    return 0;
}
/*
output:
0 1 2 3 4 5 6 7 8 9 
*/

(2)迭代器法:类似指针一样的访问,首先需要声明迭代器变量,和声明指针变量一样

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

int main(){
    //迭代器,类似于指针
    vector<int> v1{ 1,2,3,4,5,6,7,8,9,0};
    vector<int>::iterator it;//声明了一个迭代器类型的变量it,类似于指针变量
    for (it = v1.begin(); it != v1.end(); it++) {
	    cout << *it << " ";
	    //cout << *(it+1) << " ";  v[i] 和 *(v.begin() + i) 等价
    }

    //智能指针auto
    for (auto num : v1) {
	    cout << num << " ";
    }
    return 0;
}

/*
output:
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
*/

4.2 二维数组

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

int main(){
    vector<vector<int>>v;
    vector<int> v1{ 1,2,3,4 }; 
    vector<int> v2{ 5,6,7,8 };
    v.push_back(v1); 
    v.push_back(v2);
    v.push_back({ 10,11,12,13 });
    for (int i = 0; i < v.size(); i++) {
	    for (int j = 0; j < v[0].size(); j++) {
		    cout << v[i][j] << " ";
        }
	    cout << endl;
    }
    return 0;
}

/*
output:
1 2 3 4 
5 6 7 8 
10 11 12 13 
*/

参考:
https://wyqz.top/p/870124582.html
https://www.runoob.com/cplusplus/cpp-vector.html

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值