vector向量容器(顺序容器)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qin7_Victory/article/details/88936595
一 创建vector对象       (注:  下面的测试例子是根据一组数据依次实现的)

   1. 不指定容器的元素个数
      vector<int> v;
   2. 指定容器的大小(例如定义一个用来存储10个double类型元素的向量容器)
      vector<double> v1(10);
   3. 创建n个元素向量容器,并赋值 (例如 定义一个v2向量容器,共有10个元素,每个元素的值为8.6)
      vector<double> v2(10,8.6);

二 尾部元素扩张 push_back()

   尾部追加元素,vector容器会自动分配内存空间,可对空的vector对象扩张,也可对已有元素的vector对象扩张。
   for(int i = 1; i < 10; i++)
        v.push_back(i);

三 元素的插入 insert()

   1. insert()方法可以在vector()对象的任意位置前插入一个新元素,同时vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。
   
   2. insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
      - 在最前面插入新元素
         v.insert(v.begin(),11);   (例如 11 1 2 3 4 5 6 7 8 9)
      - 在第2个元素前插入一个新元素 (下标是从0开始的)
         v.insert(v.begin()+2,12); (例如 11 1 12 2 3 4 5 6 7 8 9)
      - 在向量末尾追加新元素        
         v.insert(v.end(),13);     (例如 11 1 12 2 3 4 5 6 7 8 9 13)
四 元素的删除

   1. erase() 方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素
      - 删除vector迭代器所指的一个元素
        v.erase(v.begin()+2);      (例如 11 1 2 3 4 5 6 7 8 9 13)
      - 删除一段区间中的所有元素(左闭右开)
        v.erase(v.begin()+2,v.begin()+5); (例如 11 1 5 6 7 8 9 13)
   
   2. clear() 方法一次性删除vector中的所有元素
        v.clear();
五 反向排列

   - 将向量中某段迭代器区间反向排列
      reverse(v.begin()+2,v.end());       (例如 11 1 13 9 8 7 6 5)
六 排序  (需要声明头文件 #include<algorithm> )

     可以自己设计排序比较函数,然后把这个函数指定给sort算法   
   - const定义的变量是不变的, &表示进行参数传递,函数内数值改变,函数结束后,原值也改变
     bool cmp(const int &a, const int &b)                                          
    {
       return a < b;  //如果要从大到小排序,用" > "号
    }
    sort(v.begin(),v.end(),cmp);  //sort()默认是从小到大排序
七 向量的大小
 
   1.  size()方法 可以返回向量的大小,即元素的个数
       - v.size()
   2.  empty()方法 返回向量是否为空 (如果非空,则返回逻辑假,即为0 否则返回逻辑真 即 1)
       - v.empty()
八 迭代器访问

   1. 迭代器类型一定要与它要遍历的向量容器(vector)对象的元素类型一致
   2. 迭代器配合循环语句进行遍历访问
      - 定义迭代器变量
        vector<int>::iterator it;
      -迭代器访问
         for(it = v.begin(); it != v.end(); it++)    
            cout << *it << " ";
         cout<<endl;
九  求和  (需要声明头文件 #include<numeric>)

   - accumulate算法统计所有元素的和
        accumulate(v.begin(),v.end(),20)  //后面的常数a可以理解为初始值sum = a;

测试代码如下
#include<stdio.h>
#include<vector>
#include<numeric>  //accumulate  算法需要
#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(const int &a, const int &b)   //const定义的变量是不变的
                                        //&表示进行参数传递,函数内数值改变,函数结束后,原值也改变
{
    return a < b;
}

int main()
{
    //创建vector元素对象
    vector<int> v;
    //不指定容器的元素个数

    vector<double> v1(10);
    //指定容器的大小

    vector<double> v2(10,8.6);
    //创建n个元素向量容器,并赋值

    for(int i = 1; i < 10; i++)
        v.push_back(i);
        //尾部元素扩张赋值

    //元素的插入
    v.insert(v.begin(),11);
    //insert()方法是在vector对象前的任意位置前插入一个新的元素
 
    v.insert(v.begin()+2,12);
    //插入的位置是元素迭代器的位置,而不是元素的下标

    v.insert(v.end(),13);
    //11 1 12 2 3 4 5 6 7 8 9 13

    //元素的删除

    //删除vector迭代器所指的一个元素
    v.erase(v.begin()+2);
    // 11 1 2 3 4 5 6 7 8 9 12
    //删除一段区间中的所有元素(左闭右开)
    v.erase(v.begin()+2,v.begin()+5);
    //11 1 5 6 7 8 9 13

    v.clear();
    //一次性删除所有的元素

    reverse(v.begin()+2,v.end());
    //将向量中某段迭代器区间反向排列
    //11 1 13 9 8 7 6 5

    sort(v.begin(),v.end(),cmp);
    //升序排序

    cout<<v.size()<<endl;
    //输出向量的大小
    cout<<v.empty()<<endl;
    //输出向量是否为空

    vector<int>::iterator it;
    //定义迭代器变量

    for(it = v.begin(); it != v.end(); it++)    //迭代器访问
        cout << *it << " ";
    cout<<endl;
    cout<<accumulate(v.begin(),v.end(),20)<<endl; //求和
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Qin7_Victory/article/details/88936595