C++——vector容器

简介

最近学写了C++简单记录一下。
C++在C的基础上引入了模板这一概念,而STL库则为我们提供了许多模板。
vector 容器是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++ 普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预

vector 常被称为向量容器,因为该容器擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)。

vector的使用

vector 容器以类模板 vector( T 表示存储元素的类型)的形式定义在 头文件中,并位于 std 命名空间中。因此,在创建该容器之前,代码中需包含如下内容:

#include <vector>
using namespace std;

初始化vector

在加入了上面的库和命名空间后,就可以创建vector了。
比如我们创建一个存储元素为int型的vertor:

vector<int> testVector;

由于vector是动态分布空间的,而此时vector中没有元素,所以此时没有给其分配空间,当添加元素时就会自动分配。
我们也可以给vector添加空间:

int main (){
    vector<int> testVector;
    //调用成员函数
    testVector.reserve(10);
    cout << &testVector;
    return 0;
}

reserve()的意思就是给容器分配了十个单位的空间。
注意,如果 vector 的容量在执行此语句之前,已经大于或等于 10 个元素,那么这条语句什么也不做;另外,调用 reserve() 不会影响已存储的元素,也不会生成任何元素,即 values 容器内此时仍然没有任何元素。

我们不仅可以创建空的容器,也可以像创建数组一样,创建有元素的容器:vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};
也可以创建制定空间的容器:vector<double> test(20);
如此,该容器开始时就有 20 个元素,它们的默认初始值都为 0,如果不想用 0 作为默认值,也可以指定一个其它值,例如:

vector<double> test(20, 1.0);

括号中的参数也可以是一个变量

也可以利用同类型的容器创建新的容器:

vector<char>value1(5, 'c');
vector<char>value2(value1);

由此,value2 容器中也具有 5 个字符 ‘c’。在此基础上,如果不想复制其它容器中所有的元素,可以用一对指针或者迭代器来指定初始值的范围,例如:int array[]={1,2,3}; vector<int>values(array, array+2);//values 将保存{1,2}

vector的成员函数

容器好用的一个原因就是库提供了大量的成员函数方便我们使用。
在这里插入图片描述
下面是简单的使用:

//
//  main.cpp
//  Hello C++
//
//  Created by 差不多先生 on 2022/3/8.
//

// c++向量
#include <iostream>
#include <vector>
using namespace std;
int main() {
    //初始化一个空vector容量
    vector<char>value;
    //向value容器中的尾部依次添加 3、G、N 字符
    value.push_back('3');
    value.push_back('G');
    value.push_back('N');
    //调用 size() 成员函数容器中的元素个数
    printf("元素个数为:%d\n", value.size());
    //使用迭代器遍历容器
    for (auto i = value.begin(); i < value.end(); i++) {
        cout << *i << " ";
    }
    cout << endl;
    //向容器末尾插入字符
    value.insert(value.end(), 'B');
    cout << "末尾元素为:" << value.at(3) << endl;
    for (auto i = value.begin(); i < value.end(); i++) {
        cout << *i << " ";
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值