什么是vector?

模板类vector和array是数组的替代品,当开始学习c++时突然遇见vector时也是很懵的。

模板类vector

  • 模板类vector类似于string类,是一种动态数组,可以在运行的阶段设置vector对象的长度,可在末尾添加新的数据,还可以在中间添加新的数据,基本上,它是使用new创建动态数组的替代品。实际上,vector类确实使用new和delete来管理内存。
    我们不深入研究vector到底是什么,只简单的讨论他的用法。首先,使用vector时要引入头文件#include,其次,vector包含在std空间中,第三,模板类用不同的语法来指出他的类型。第四,用不同的语法来表示不同的元素数
    例如:
vector<int>arr1;//开辟一个arr1数组
int n;
cin>>n;
vector<double>arr2(n);//开辟一个double型的长度为n的数组

arr1是一个vector的对象,arr2是一个vector的对象。由于vector对象在插入值时可以自动调节长度因此可以将arr1的长度赋值为0,但是如果要调整长度需要调用vector里中的各种方法。
vectorarr2(n)为开辟一个名为arr2的double型的数组长度为n。
除了分配存储空间外,vector还提供了一些基本方法,其中包括size()——返回容器中元素个数、swap()——交换两个容器内容、begin()——返回一个指向容器第一个元素的迭代器、end()——返回一个超过容器尾的迭代器、insert()——插入元素、erase()——删除元素。
什么是超过容器尾,它是指向超过容器最后一个元素指向最后一个的下一个的元素。超过结尾是一个指向元素的指针。end()成员函数标识超过结尾位置。
vector 也包含一些只有某些STL容器才有的方法。push_back()是一个种的方法,它将元素插入到末尾。
ease()方法删除给定的区间的元素,他接受两个参数,这些参数定义了要删除的区间,第一个参数位于指向区间的起始位置,第二个参数指向区间终止的后一个位置
例如:

arr earse(arr.begin(),arr.begin()+2);//删除了begin()和begin()+1两个元素

insert()方法给指定的区间插入元素,它有三个参数,第一个参数指定新元素插入的位置,第二个和第三个参数定义了被插入区间,该区间通常是容器对象的一部分。
例如:

vector<int>old;
vector<int>new;
old.insert<old.begin(),new.begin()+1,new.end()>;//将new中除了第一个元素都插入到old中第一个元素之前。

最后附上一道<<剑指offer>>中的题目
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

class Solution {
public:
    bool Find(int target, vector<vector<int> > array)
    {
         int row=array.size();
         int col=array[0].size()
    }
};

vector < vector < int > >array是创建一个名为array的二维数组他的数据类型是int型。

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

class Solution {
public:
    bool Find(int target, vector<vector<int> >array) {
        int row = array.size();
        int col = array[0].size();
        int i, j;
        for (i = row - 1, j = 0; i >= 0 && j < col;)//for循环里必须有两个分号不能省略
        {
            if (target < array[i][j])//从第一列的后面往前遍历,因为数组是从小往大递增的
            {
                i--;
                continue;
            }
            else if (target > array[i][j])//当目标值大于这一列的最大值时直接进入下一列
            {
                j++;
                continue;
            }
            else
            {
                    cout << array[i][j] << endl;
                    return true;
            }
        }

        return false;

    }
};

int main()
{
    Solution s;
    vector<vector<int> >array(4, vector<int>(4));  //定义一个4*4的二维数组
                                                   //给数组元素赋值 
    array[0][0] = 1;
    array[0][1] = 2;
    array[0][2] = 3;
    array[0][3] = 4;
    array[1][0] = 2;
    array[1][1] = 3;
    array[1][2] = 6;
    array[1][3] = 7;
    array[2][0] = 3;
    array[2][1] = 4;
    array[2][2] = 7;
    array[2][3] = 8;
    array[3][0] = 5;
    array[3][1] = 6;
    array[3][2] = 9;
    array[3][3] = 10;
    cout << s.Find(9, array);
    system("pause");
    return 0;
}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值