STL容器之【vector】的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37964547/article/details/81517499

一、vector

1、基本介绍

在C++中,vector是一个十分有用的序列式容器,它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

2、用法介绍

为了使用vector,必须包含头文件。另,vector属于std命名空间,因此需要通过命名限定,可以有如下三种方式,后两种方式更好,因为未引入的无关的内容。

(1) using namespace std;
(2)using  std::vector;
(3)std::vector<int> vec;

vector的基本操作

  • vec.begin() //指向迭代器中第一个元素。
  • vec.end() //指向迭代器中末端元素的下一个,指向一个不存在元素。 -
  • vec.push_back(elem) //在尾部加入一个数据。
  • vec.pop_back() //删除最后一个数据。
  • vec.capacity() //vector可用空间的大小。
  • vec.size() //返回容器中数据个数。
  • vec.empty() //判断容器是否为空。
  • vec.front() //传回第一个数据。
  • vec.back() //传回最后一个数据,不检查这个数据是否存在。
  • vec.at(index) //传回索引idx所指的数据,如果idx越界,抛出out_of_range
  • vec.clear() //移除容器中所有数据。
  • vec.erase(iterator) //删除pos位置的数据,传回下一个数据的位置。
  • vec.erase(begin,end) //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator
  • vec.insert(position,elem) //在pos位置插入一个elem拷贝,传回新数据位置。
  • vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。
  • vec.insert(position,begin,end) //在pos位置插入在[beg,end)区间的数据,无返回值

3、用法示例

这里首先创建一个vector对象:

vector<int> vec;

int为数组元素的类型,vec为动态数组的名字

当然我们也可以利用vector创建二维数组:

vector<vector<int>> _v;

现在就是介绍vector的基本操作了

(1)尾部插入元素

void Vectest()
{
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);
    vec.push_back(6);
    vector<int>::iterator it = vec.begin();
    while (it != vec.end())
    {
        cout << *it<<" ";
        it++;
    }
    cout << endl;
}

int main()
{
    Vectest();
    system("pause");
    return 0;
} 

结果显示:
这里写图片描述
(2)删除元素

这里写图片描述
(3)查看vec数组中元素的个数和容量
这里写图片描述
(4)打印第一个元素和最后一个元素
这里写图片描述
(5)删除pos位置的数据
这里写图片描述
(6)删除指定区间的元素
这里写图片描述
(7)其他三种插入方式:
insert() 函数有以下三种用法:
1、在指定位置位置前插入值为val的元素,返回指向这个元素的迭代器
2、在指定位置位置前插入num个值为val的元素
3、在指定位置位置前插入区间[begin, end)的所有元素

void Vectest()
{
    vector<int> vec(4,0);
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);
    vec.push_back(6);
    vector<int>::iterator it = vec.begin();
    while (it != vec.end())
    {
        cout << *it<<" ";
        it++;
    }
    cout << endl;
    vector<int>::iterator begin = vec.begin();
    vector<int>::iterator end= vec.begin()+3;


    vec.insert(begin, 10);
    cout << "在begin位置插入元素10:";
    it = vec.begin();
    while (it != vec.end())
    {
        cout << *it << " ";
        it++;
    }
    cout << endl;
    vec.insert(end, 3, 9);
    cout << "在end位置插入3个9:";
    it = vec.begin();
    while (it != vec.end())
    {
        cout << *it << " ";
        it++;
    }
    cout << endl;

这里写图片描述
(8)判断数组是否为空和清除数组元素

void Vectest()
{
    vector<int> vec(4,0);
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);
    vec.push_back(6);
    vector<int>::iterator it = vec.begin();
    while (it != vec.end())
    {
        cout << *it<<" ";
        it++;
    }
    cout << endl;

    if (vec.empty())
        cout << "数组为空" << endl;
    else
        cout << "数组不为空" << endl;
    vec.clear();
    it = vec.begin();
    while (it != vec.end())
    {
        cout << *it << " ";
        it++;
    }
    cout << endl;

}

这里写图片描述
(9)at和assign函数:

void Vectest()

{
vector vec,tmp;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);

cout << "vec中的内容:";
vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
    cout << *it<<" ";
    it++;
}
cout << endl;
cout << "vec.at(5):" << vec.at(5) << endl;
tmp.assign(vec.begin(), vec.end());
cout << "将vec中的内容复制到tmp中,tmp中的内容:";
it = vec.begin();
while (it != vec.end())
{
    cout << *it << " ";
    it++;
}
cout << endl;
cout << "赋n个值为x的元素到当前vector中,当前vector会清除掉容器中之前的内容:";
vec.assign(5, 3);
it = vec.begin();
while (it != vec.end())
{
    cout << *it << " ";
    it++;
}
cout << endl;

}
这里写图片描述
(10)反向迭代器

void Vectest()
{
    vector<int> vec,tmp;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);
    vec.push_back(6);

    cout << "vec中的内容:";
    vector<int>:: reverse_iterator r_it = vec.rbegin();
    while (r_it != vec.rend())
    {
        cout << *r_it << " ";
        r_it++;
    }
    cout << endl;
    cout << "size:" << vec.size() << endl;
    cout << "capacity:" << vec.capacity() << endl;
    cout << "vec.rbegin:" << *vec.rbegin() << endl;

}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_37964547/article/details/81517499
今日推荐