zoukankan      html  css  js  c++  java
  • vector的用法

    vector相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,

    用其来解决问题可以达到最大节约空间的目的.

    就是常数很大,但要是开了O2,一切都不是问题。
    就像数组一样,vector也采用的连续存储空间来存储元素。
    也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。
    但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

    但是对于编程来讲,我们只会用就可以了。

    NEXT,用法奉上。

    1.vector的元素不仅仅可以是int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。

    2.当然,要有头文件#include<vector>

    3.我们以vector<int>a;为例

    基本上包含了vector的常用函数(不够再补)

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 #define DB double
     4 using namespace std;
     5 const int tmp=100;
     6 vector<int>a;//创建vector对象
     7 vector<int>b(6,9);
     8 /*vector的声明及初始化 
     9 vector<int> a;        //声明一个int型向量
    10 vector<int> a(5);     //声明一个初始大小为5的int向量
    11 vector<int> a(10, 1); //声明一个初始大小为10且值都是1的向量
    12 vector<int> a(tmp);   //声明并用tmp向量初始化vec向量
    13 vector<int> tmp(a.begin(), a.begin() + 3);  //用向量vec的第0个到第2个值初始化tmp
    14 int arr[5] = {1, 2, 3, 4, 5};   //下标依旧是从0开始 
    15 vector<int> a(arr, arr+ 5);      //将arr数组的元素用于初始化vec向量
    16 //说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
    17 //这个主要是为了和vec.end()指针统一。
    18 vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
    19 */ 
    20 int main()
    21 {
    22     for(int i=11;i<=20;++i) a.push_back(i);//尾部插入数字,下标从0开始 
    23     cout<<a.front()<<endl;//传回第一个数据 
    24     cout<<a.back()<<endl;//传回最后一个数据
    25     cout<<a.capacity()<<endl;//返回容器当前能够容纳的元素数量
    26     cout<<a.size()<<endl;//返回当前容器中实际的元素个数
    27     cout<<a.empty()<<endl;//判断容器是否为空,空是1,非空是0
    28     cout<<a.max_size()<<endl;//返回容器可以存储的最多元素数目 
    29     for(int i=0;i<a.size();++i) cout<<a.at(i)<<" ";cout<<endl;//a.at(i)得到编号位置的数据
    30     /*****************************************************************************************/
    31    /* lower_bound(a.begin(),a.end(),x) 返回>=x的第一个数的下标(指针)
    32       upper_bound(a.begin(),a.end(),x) 返回>=x的第一个数的下标(指针)
    33   *************************************************************************************************/
    34     for(int i=1;i<=10;++i) cout<<a[i-1]<<" ";cout<<endl;//使用下标访问元素 
    35     std::vector<int>::iterator it;
    36     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;//使用迭代器访问元素 
    37     /*a.begin()           返回指向容器第一个元素的迭代器
    38     a.end()             返回指向容器最后一个元素的迭代器*/
    39     /******************************************************************************************/
    40     a.insert(a.begin()+4,211);//a.insert(a.begin()+i,a);在第i个元素后面插入a;传回新数据位置的迭代器 
    41     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    42     a.insert(a.begin()+5,3,985);
    43     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    44     /****************************************************************************************/
    45     a.erase(a.begin()+4);//a.erase(a.begin()+i);删除第i+1个元素;传回下一个数据的位置的迭代器 
    46     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    47     a.erase(a.begin()+1,a.begin()+4);//a.erase(a.begin()+i,a.end()+j);删除区间[i,j-1];区间从0开始;传回下一个数据的位置的迭代器 
    48     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    49     /***********************************************************************************************/
    50     a.pop_back();//删除最后一个数据
    51     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    52     vector<int>::reverse_iterator p;
    53     for(p=a.rbegin();p!=a.rend();++p) cout<<*p<<" ";cout<<endl;
    54     /*a.rbegin() 传回一个逆向的第一个数据的迭代器 
    55     a.rend() 传回一个逆向的最后一个数据的下一个位置的迭代器 */
    56     /**************************************************************************************************/
    57     a.resize(6);//重新指定队列的长度,即只剩前六个元素,剩下的元素都删除了 
    58     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    59     a.reserve(100);//增加队列容量,就是reserve增加的空间未被初始化不能引用
    60     cout<<a.size()<<endl;
    61     /***********************************************************************************************/
    62     swap(a[3],a[0]);//交换队列中的两个元素 
    63     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    64     a.clear(); cout<<a.size()<<endl;//a.clear();清除a中的内容 
    65     a.swap(b);//交换a,b,两个向量的内容 
    66     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
    67     cout<<b.size();
    68     return 0;
    69 }
  • 相关阅读:
    根据excel表格中的某一列内容,使用python将其拆分成多个excel表格
    Python操作excel
    opensips(三):load_balancer与NAT
    opensips(二):NAT官方脚本
    sip头域
    OPensips(一):NAT例子
    四、word2vec + siameseLSTM改进(1)
    三、word2vec + siameseLSTM
    二、LSTM处理不定长句子
    一、word2vec的使用
  • 原文地址:https://www.cnblogs.com/adelalove/p/11706693.html
Copyright © 2011-2022 走看看