vector 订阅
Vector类 是在 java 中可以实现自动增长的对象数组,vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 展开全文
Vector类 是在 java 中可以实现自动增长的对象数组,vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
信息
外文名
vector
头文件
#include
命名空间
using namespace std
属    性
类库
运用软件
JAVA、C++
vector详细介绍
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 [1]  简单的使用方法如下:我们可以用一个迭代器:vector::iterator iter=test.begin();//定义一个可以迭代int型vector的迭代器iter,它指向test的首位for(;iter!=test.end();iter++) cout<<(*iter);//iter++指的是向后迭代一位,直到iter到超出末端迭代器为止,输出迭代器指向的值我们也可以使用at访问:Java中Vector类是允许不同类型元素共存的变长数组,Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,向量类中提供的大量方法也大大方便了用户的使用。 [2]  在相对于ArrayList来说,Vector线程是安全的,也就是说是同步的。创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。向量类提供了三种构造方法: [3]  使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。参数capacityIncrement给定了每次扩充的扩充值。当capacityIncrement为0时,则每次扩充一倍。利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户使用:
收起全文
精华内容
参与话题
问答
  • C++_vector操作

    万次阅读 多人点赞 2019-05-28 11:24:15
    vector说明: vector是向量类型,可以容纳许多类型的数据,因此也被称为容器 (可以理解为动态数组,是封装好了的类) vector头文件-vector vector初始化: 方式1. vector<int>a(10);//定义具有10个...

    1. vector:

    1.1 vector 说明

    • vector是向量类型,可以容纳许多类型的数据,因此也被称为容器
    • (可以理解为动态数组,是封装好了的类)
    • 进行vector操作前应添加头文件#include <vector>

    1.2 vector初始化:

    方式1.

    //定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定
    vector<int>a(10);
    

    方式2.

    //定义具有10个整型元素的向量,且给出的每个元素初值为1
    vector<int>a(10,1);
    

    方式3.

    //用向量b给向量a赋值,a的值完全等价于b的值
    vector<int>a(b);
    

    方式4.

    //将向量b中从0-2(共三个)的元素赋值给a,a的类型为int型
    vector<int>a(b.begin(),b.begin+3);
    

    方式5.

     //从数组中获得初值
    int b[7]={1,2,3,4,5,6,7};
    vector<int> a(b,b+7;
    

    1.3 vector对象的常用内置函数使用(举例说明)

    #include<vector>
    vector<int> a,b;
    //b为向量,将b的0-2个元素赋值给向量a
    a.assign(b.begin(),b.begin()+3);
    //a含有4个值为2的元素
    a.assign(4,2);
    //返回a的最后一个元素
    a.back();
    //返回a的第一个元素
    a.front();
    //返回a的第i元素,当且仅当a存在
    a[i];
    //清空a中的元素
    a.clear();
    //判断a是否为空,空则返回true,非空则返回false
    a.empty();
    //删除a向量的最后一个元素
    a.pop_back();
    //删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束
    a.erase(a.begin()+1,a.begin()+3);
    //在a的最后一个向量后插入一个元素,其值为5
    a.push_back(5);
    //在a的第一个元素(从第0个算起)位置插入数值5,
    a.insert(a.begin()+1,5);
    //在a的第一个元素(从第0个算起)位置插入3个数,其值都为5
    a.insert(a.begin()+1,3,5);
    //b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6)
    a.insert(a.begin()+1,b+3,b+6);
    //返回a中元素的个数
    a.size();
    //返回a在内存中总共可以容纳的元素个数
    a.capacity();
    //将a的现有元素个数调整至10个,多则删,少则补,其值随机
    a.resize(10);
    //将a的现有元素个数调整至10个,多则删,少则补,其值为2
    a.resize(10,2);
    //将a的容量扩充至100,
    a.reserve(100);
    //b为向量,将a中的元素和b中的元素整体交换
    a.swap(b);
    //b为向量,向量的比较操作还有 != >= > <= <
    a==b;
    

    2. 顺序访问vector的几种方式,举例说明

    2.1. 对向量a添加元素的几种方式

    1.向向量a中添加元素

    vector<int>a;
    for(int i=0;i<10;++i){a.push_back(i);}
    

    2.从数组中选择元素向向量中添加

    int a[6]={1,2,3,4,5,6};
    vector<int> b;
    for(int i=0;i<=4;++i){b.push_back(a[i]);}
    

    3.从现有向量中选择元素向向量中添加

    int a[6]={1,2,3,4,5,6};
    vector<int>b;
    vector<int>c(a,a+4);
    for(vector<int>::iterator it=c.begin();it<c.end();++it)
    {
    	b.push_back(*it);
    }
    

    4.从文件中读取元素向向量中添加

    ifstream in("data.txt");
    vector<int>a;
    for(int i;in>>i){a.push_back(i);}
    

    5.常见错误赋值方式

    vector<int>a;
    for(int i=0;i<10;++i){a[i]=i;}//下标只能用来获取已经存在的元素
    

    2.2 从向量中读取元素

    1.通过下标方式获取

    int a[6]={1,2,3,4,5,6};
    vector<int>b(a,a+4);
    for(int i=0;i<=b.size()-1;++i){cout<<b[i]<<endl;}
    

    2.通过迭代器方式读取

     int a[6]={1,2,3,4,5,6};
     vector<int>b(a,a+4);
     for(vector<int>::iterator it=b.begin();it!=b.end();it++){cout<<*it<<"  ";}
    

    3.几个常用的算法

     #include<algorithm>
     //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
     sort(a.begin(),a.end());
     //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
     reverse(a.begin(),a.end());
      //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
     copy(a.begin(),a.end(),b.begin()+1);
     //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
      find(a.begin(),a.end(),10);
    
    展开全文
  • Vector

    千次阅读 多人点赞 2018-03-17 14:08:58
    Vector Vector非常类似ArrayList,都继承自AbstractList并且都实现了List接口,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator...

    Vector

            Vector非常类似ArrayList,都继承自AbstractList并且都实现了List接口,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

            Vector实现List接口,所以里面的元素是有序的。

     向Vector中加入的元素add()方法是有序的,后加入的排列在最后。

    我们也可以调用add(int index,E element)方法向指定位置加入元素。

    vector.elements()方法返回一个枚举类型,我们可以用来遍历整个vector。

    vector.iterator()方法返回一个迭代器,同样可以用来遍历整个vector

    vector.contains(E element)方法,如果vector中存在指定元素则返回true,否则false。

    vector.get(int index)方法,返回指定位置的元素,如果超过vector的capacity则报错。

    初始化vector时,默认不带参数的话,vector的初始capacity大小为10。当当前空间不足以加入新元素时,capacity会加倍,即从10变成20,40,80......

    当然我们也可以使用下面两种带参数的构造

    1.Vector vector=new Vector(int  capacity);指定初始化大小,不允许负数大小的初始化。如果初始化大小为0,则加入数据时大小变为1,然后每次扩充遵循加倍原则。

    2.Vector vector=new Vector(int capacity,int increasesize)指定初始化大小,并且以后每次容量不足时,大小每次增加increasesize。


    import java.util.Enumeration;
    import java.util.Iterator;
    import java.util.Vector;
    
    public class Test {
        public static void main(String[] args){
            Vector vector=new Vector(0);
            System.out.println("vector的初始大小: "+vector.capacity());
            vector.add("大家好"); //Appends the specified element to the end of this Vector.
            vector.add("111");  //add方法将新元素加到末尾
            vector.add("222");
            vector.add("你好");               //elements()返回这个向量内所有元素的枚举
            Enumeration e=vector.elements();//Returns an enumeration of the components of this vector.
            System.out.println(vector.capacity());
            while(e.hasMoreElements()){
                System.out.println(e.nextElement());
            }
            System.out.println("---------分界线----------------------");
            vector.add(2,"我在第三位"); //add(int index,E element)将新元素加入到指定位置
            Iterator iterator=vector.iterator(); //使用迭代器
            while(iterator.hasNext()){
                System.out.println(iterator.next());
            }
            for(int i=0;i<100;i++) {
                vector.add(i);
                System.out.print(vector.capacity()+" ");
                if(i%10==0) System.out.println();
            }
            System.out.println(vector.capacity());
            System.out.println(vector.contains("你好"));
            System.out.println(vector.get(2));
        }
    }

    运行结果:

    vector的初始大小: 10
    10
    大家好
    111
    222
    你好
    ---------分界线----------------------
    大家好
    111
    我在第三位
    222
    你好
    10 
    10 10 10 10 20 20 20 20 20 20 
    20 20 20 20 40 40 40 40 40 40 
    40 40 40 40 40 40 40 40 40 40 
    40 40 40 40 80 80 80 80 80 80 
    80 80 80 80 80 80 80 80 80 80 
    80 80 80 80 80 80 80 80 80 80 
    80 80 80 80 80 80 80 80 80 80 
    80 80 80 80 160 160 160 160 160 160 
    160 160 160 160 160 160 160 160 160 160 
    160 160 160 160 160 160 160 160 160 160
    true
    我在第三位

    初始化大小为0

    vector的初始大小: 0
    capacity:1
    capacity:2
    capacity:4
    capacity:4
    大家好
    111
    222
    你好
    8 8 8 8 16 16 16 16 16 16 
    16 16 32 32 32 32 32 32 32 32 
    32 32 32 32 32 32 32 32 64 64 
    64 64 64 64 64 64 64 64 64 64 
    64 64 64 64 64 64 64 64 64 64 
    64 64 64 64 64 64 64 64 64 64 
    128 128 128 128 128 128 128 128 128 128 
    128 128 128 128 128 128 128 128 128 128 
    128 128 128 128 128 128 128 128 128 128 
    128 128 128 128 128 128 128 128 128 128 
    128
    true
    222


    展开全文
  • vector

    千次阅读 多人点赞 2019-08-18 23:10:38
    vector的插入及基本要素 #include <stdio.h> #include <iostream>//cin>> cout<< 必备 #include <vector>//vector 必备 using namespace std; int main() { int a[1000]; ...
     

    vector 的插入及基本要素

     

    #include <stdio.h>
    #include <iostream>//cin>> cout<< 必备
    #include <vector>//vector 必备
    using namespace std;
    int main()
    {
        int a[1000];
        vector<int> v;//定义一个容器数组
        vector<int> ::iterator it;//定义一个vector(容器数组)类型的迭代器指针,此指针具有指向vector容器数组的作用
       for(int i=0;i<10;i++)
       {
           cin>>a[i];//输入a[i]
          v.push_back(a[i]);//把a[i]输入v容器数组里
       }
    
       for(it=v.begin();it!=v.end();it++)//v.begin()是vector容器数组的初始下标;v.end()是vector容器数组的终止元素的下一位,为空;it指针从初始开始指向.....
       {
           if(*it==0)//当it指向0时;
           {
                      v.insert(it,3);//把3插入it(0)前 //也可写成 v.insert(v.begin()+i,a) 或者 v.insert(v.end()+i,a) 把a插到v.begin()+i前面
                      it++;//it要++,否则陷入死循环,因为*it==0下标始终右移一位;
           }
        }
       for(it=v.begin();it!=v.end();it++)
       {
          cout<<*it<<"\n";//逐个输出*it(vector容器数组的元素);
       }
    
    return 0;
    }
    
    
    

    2 (区间)删除

    #include <stdio.h>
    #include <iostream>
    #include <vector>
    using namespace std;
    int main()
    {
        int a[1000];
        vector<int> v;
        vector<int> ::iterator it;
       for(int i=0;i<10;i++)
       {
          v.push_back(i);
       }
        v.erase(v.begin(),v.end()-1);//区间删除
       for(it=v.begin();it!=v.end();it++)
       {
          cout<<*it<<"\n";
       }
    return 0;
    }
    
    
    
     

    3 字符数组

    ​
    #include <stdio.h>
    #include <iostream>
    #include <vector>
    using namespace std;
    int main()
    {
        char a[1000];
        vector<char> v;
        vector<char> ::iterator it;
       for(int i=0;i<5;i++)
       {
          cin>>a[i];
          v.push_back(a[i]);
       }
       v.erase(v.begin()+1,v.begin()+3);
       v.insert(v.begin()+1,'0');
       for(it=v.begin();it!=v.end();it++)
       {
          cout<<*it<<"\n";
       }
    return 0;
    }
    
    
    
    ​

     

     


     

    展开全文
  • C++ vector的使用总结及常用vector操作

    千次阅读 多人点赞 2019-09-07 00:48:48
    C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include <vector> 二、使用方式 C++ vector类有两种使用方式: 第一种:...

    一、介绍

    C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件:

    #include <vector>

    二、使用方式

    C++ vector类有两种使用方式:

    第一种:STL方式

    vector< string > text;

    1.  我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后面插入一个元素下面的 while 循环从标准输入读入一个字符串序列并每次将一个字符串插入到 vector 中  

    string word; 
    while ( cin >> word ) { 
    text.push_back( word ); 
    // ... 
    }

    虽然我们仍可以用下标操作符来迭代访问元素  

    cout << "words read are: \n"; 
     
    for ( int ix = 0; ix < text.size(); ++ix ) 
          cout << text[ ix ] << ' '; 
     
    cout << endl; 


    但是 更典型的做法是使用vector 操作集中的begin()和 end()所返回的迭代器 iterator  
    对 :

    cout << "words read are: \n"; 
     
    for ( vector<string>::iterator it = text.begin(); 
        it != text.end(); ++it ) 
               cout << *it<< ' '; 
     
    cout << endl 


    iterator 是标准库中的类,它具有指针的功能 

    *it; 
    对迭代器解引用,并访问其指向的实际对象  
    ++it;

    向前移动迭代器 it 使其指向下一个元素  

    2.  注意 不要混用这两种习惯用法, 例如,下面的定义  
    vector< int > ivec; 
    定义了一个空vector 再写这样的语句  
    ivec[ 0 ] = 1024; 
    就是错误的 ,因为 ivec 还没有第一个元素,我们只能索引 vector 中已经存在的元素 size()操作返回 vector 包含的元素的个数。

    3. 类似地 当我们用一个给定的大小定义一个vector 时,例如  :
    vector<int> ia( 10 ); 
    任何一个插入操作都将增加vector 的大小,而不是覆盖掉某个现有的元素,这看起来好像是很显然的,但是下面的错误在初学者中并不少见:

    const int size = 7; 
    int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 }; 
    vector< int > ivec( size ); 
    for ( int ix = 0; ix < size; ++ix ) 
        ivec.push_back( ia[ ix ]); 

    程序结束时ivec 包含 14 个元素, ia 的元素从第八个元素开始插入。

    第二种:类数组使用

    1. 定义一个已知长度的 vector :

    vector< int > ivec( 10 );  //类似数组定义int ia[10 ];

    可以通过ivec[索引号] 来访问元素

    使用 if ( ivec.empty() ) 判断是否是空,ivec.size()判断元素个数。

     

    2. vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化,例如  
    vector< int > ivec( 10, -1 ); 
    定义了 ivec 它包含十个int型的元素每个元素都被初始化为-1 

    对于内置数组我们可以显式地把数组的元素初始化为一组常量值,例如: 
    int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };


    我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分,只需指定希望被用来初始化 vector 的数组的开始地址以及数组最末元的下一位置来实现,例如:  
    // 把 ia 的 6 个元素拷贝到 ivec 中 
    vector< int > ivec( ia, ia+6 );  


    被传递给ivec 的两个指针标记了用来初始化对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置,标记出来的元素范围也可以是数组的一个子集,例如 :

    // 拷贝 3 个元素 ia[2],ia[3], ia[4] 
    vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );


    3. 与内置数组不同 vector 可以被另一个 vector 初始化或被赋给另一个 vector 例如  

    vector< string > svec; 
    void init_and_assign() 
    { 
        // 用另一个 vector 初始化一个 vector 
        vector< string > user_names( svec ); 
        // ... 
     
        // 把一个 vector 拷贝给另一个 vector 
        svec = user_names; 
    }

     三、vector使用总结:

    1. vector的初始化:

    可以有五种方式,举例说明如下:

    (1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
    (2)vector<int>a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
    (3)vector<int>a(b); //用b向量来创建a向量,整体复制性赋值
    (4)vector<int>a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
    (5)intb[7]={1,2,3,4,5,9,8};vector<int> a(b,b+7); //从数组中获得初值

    2. vector对象的几个重要操作

    举例说明如下:

    (1)a.assign(b.begin(), b.begin()+3);//b为向量,将b的0~2个元素构成的向量赋给a
    (2)a.assign(4,2);//是a只含4个元素,且每个元素为2
    (3)a.back();//返回a的最后一个元素
    (4)a.front();//返回a的第一个元素
    (5)a[i]; //返回a的第i个元素,当且仅当a[i]存在2013-12-07
    (6)a.clear();//清空a中的元素
    (7)a.empty();//判断a是否为空,空则返回ture,不空则返回false
    (8)a.pop_back();//删除a向量的最后一个元素
    (9)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
    (10)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5
    (11)a.insert(a.begin()+1,5);//在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
    (12)a.insert(a.begin()+1,3,5);//在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
    (13)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8
    (14)a.size();//返回a中元素的个数;
    (15)a.capacity();//返回a在内存中总共可以容纳的元素个数
    (16)a.rezize(10);//将a的现有元素个数调至10个,多则删,少则补,其值随机
    (17)a.rezize(10,2);//将a的现有元素个数调至10个,多则删,少则补,其值为2
    (18)a.reserve(100);//将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能) 
    (19)a.swap(b);//b为向量,将a中的元素和b中的元素进行整体性交换
    (20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<

    3. 顺序访问vector的几种方式

    举例说明如下:
    1、向向量a中添加元素

    vector<int> a;
    for(int i=0;i<10;i++)
    a.push_back(i);

    2、也可以从数组中选择元素向向量中添加

    int a[6]={1,2,3,4,5,6};
    vector<int> b;
    for(int i=1;i<=4;i++)
    b.push_back(a[i]);

    3、也可以从现有向量中选择元素向向量中添加

    int a[6]={1,2,3,4,5,6};
    vector<int> b;
    vector<int> c(a,a+4);
    for(vector<int>::iterator it=c.begin();it<c.end();it++)
    b.push_back(*it);

    4、也可以从文件中读取元素向向量中添加

    ifstream in("data.txt");
    vector<int> a;
    for(int i; in>>i)
    a.push_back(i);

    5、易犯错误

    vector<int> a;
    for(int i=0;i<10;i++)
    a[i]=i;
    //这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素,而现在的a[i]还是空的对象

    (2)从向量中读取元素
    1、通过下标方式读取

    int a[6]={1,2,3,4,5,6};
    vector<int> b(a,a+4);
    for(vector<int>::iterator it=b.begin();it!=b.end();it++)
    cout<<*it<<" ";

    四、几种重要的算法

    使用时需要包含头文件:
    #include<algorithm>
    (1)sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
    (2)reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
    (3)copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
    (4)find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置


    五、其它使用举例:


    (1)把一个vector中元素追加到另外一个容器vector,示例程序如下:

    #include <vector>
    
    #include <iostream>
    
    template <typename type> void printvector(std::vector<type> const &v, std::ostream &os = std::cout)
    
    {
    
        for (typename std::vector<type>::size_type sz = 0; sz != v.size(); ++sz)
    
            os << v[sz] << " ";
    
        os << std::endl;
    
    }
    
    int main()
    
    {
    
        int a[5] = {1, 2, 3, 4, 5};
    
        std::vector<int> v1(a, a + 3), v2(a + 3, a + 5);
    
        printvector(v1); // 结果是1 2 3
    
        printvector(v2); // 结果是4 5
    
        v1.insert(v1.end(), v2.begin(), v2.end()); // 把v2加到v1末尾
    
        printvector(v1); // 结果是1 2 3 4 5
    
        return 0;
    
    }

     (2)类和结构体存vector入实例:由于vector只允许一个占位,所以才将struct塞进vector,以弥补vector的不足。

    #include "stdafx.h"
    #include <vector>
    #include <string>
    using namespace std;
    class AClass
    {
    public:
        int num;
        string name;
    };
    struct AStruct 
    {
        int num;
        string name;
    };
    void TestStruct()
    {
     //类的使用
        AClass Ac;
        vector<AClass> vc;
        Ac.num=10;
        Ac.name="name";
        vc.push_back(Ac);
        AClass d;  
        for (vector<AClass>::iterator it=vc.begin();it<vc.end();++it)  
        {  
            d=*it;  
            cout<<d.num<<endl; 
        } 
     //结构体的使用
        AStruct As;
        vector<AStruct> vs;
        As.num=10;
        As.name="name";
        vs.push_back(As);
        AStruct ds;  
        for (vector<AStruct>::iterator it=vs.begin();it<vs.end();++it)  
        {  
            ds=*it;  
            cout<<ds.num<<endl; 
        } 
    }
    void TestPoint()
    {
     //类的使用
        AClass *Ac=new AClass;
        vector<AClass *> vc;
        Ac->num=10;
        Ac->name="name";
        vc.push_back(Ac);
        AClass *d;  
        for (vector<AClass*>::iterator it=vc.begin();it<vc.end();++it)  
        {  
            d=*it;  
            cout<<d->num<<endl; 
        } 
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        TestStruct();
        TestPoint();
        int n;
        cin>>n;
        return 0;
    }

    (3)C++中将两个vector中的值整合到另一个vector中,vecB和vecA中有相同的struct个数,现在想将每个vecA中的每个a的值传给vecC中c1,每个vecB中的每个b的值传给vecC中c2,也就是将两个容器中的内容整合到新的容器C中

    struct A
    {
    int a;
    };
    vector<A> vecA;
    struct B
    {
    int b;
    };
    vector<B> vecB;
    struct C
    {
    int c1;
    int c2;
    };
    vector<C> vecC;
    容器C和A、B中元素类型不同,迭代器类型就不同,所以不能用容器算法,使用迭代器遍历赋值,合并代码如下:
    第一种方法:
    for(vecA::const_iterator itA = vecA.begin(), VecB::const_iterator itB = vecB.begin();
            itA != vecA.end() && itB != vecB.end(); itA++, itB++){
            C c;
            c.c1 = (*itA).a;
            c.c2 = (*itB).b;
            vecC.push_back(c);
    }

    第二种方法:

    void MergeVector(vector<A> &vectorA,vector<B> &vectorB,vector<C> &vectorC)
    {
    vector<A>::iterator pva;
    vector<B>::iterator pvb;
    vector<C>::iterator pvc;
    pva = vectorA.begin();
    pvb = vectorB.begin();
    pvc = vectorC.begin();
    while(pva!=vectorA.end())
    {
    *pvc->c1 = *pva->a;
    *pvc->c2 = *pvb->b;
    pva++;
    pvb++;
    pvc++;
    }
    }

    (4)建立两个int类型的向量vector,利用merge算法合并,再用sort算法对合并后算法排序

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    vector<int> merge(vector<int> ,vector<int> );
    int main()
    {
    vector<int> v1;
    v1.push_back(4);
    v1.push_back(6);
    v1.push_back(2);
    vector<int> v2;
    v2.push_back(3);
    v2.push_back(1);
    v2.push_back(5);
    vector<int> v3=merge(v1,v2);
    sort(v3.begin(),v3.end());
    for(vector<int>::iterator it=v3.begin();it!=v3.end();++it){
    cout<<*it<<endl;
    }
    }
    vector<int> merge(vector<int> v1,vector<int> v2)
    {
    v1.insert(v1.end(),v2.begin(),v2.end());
    return v1;
    }

    转自:https://blog.csdn.net/fanyun_01/article/details/56842637

    展开全文
  • vector用法

    千次阅读 2018-07-05 13:33:32
    1、正确的vector初始化的方法是:vector&lt;T&gt; v1;vector保存类型为T的对象。默认构造函数v1为空。vector&lt;T&gt; v2(v1);v2是v1的一个副本。vector&lt;T&gt; v3(n, i);v3包含n个值为i...
  • C++vector的使用总结及常用vector操作

    千次阅读 多人点赞 2018-07-12 22:10:22
    一、C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include &lt;vector&gt; 二、C++ vector类有两种使用方式: 第一种...
  • C++ STL vector 扩容策略

    万次阅读 2020-09-23 12:09:25
    文章目录一、引例1、vector 扩容概述2、扩容时机3、扩容大小二、扩容逻辑解析1、扩容逻辑实现2、精简后的扩容逻辑3、验证扩容逻辑4、优化 一、引例 1、vector 扩容概述 我们知道,STL 的 vector 底层实现是动态数组...
  • 我已经生成了一个二维vector,但是我需要在后来给里面的每一个vector添加一个数据,下面是我写的代码,可是数据并没有添加到vector里来. ``` std::vector <std::vector<std::string>> array; std::vector ...
  • 定义一个info类,n为一个输入的值 vector<vector<info>> v: v.assign(n,vector(n,ifo)): 怎么呢会出错呢
  • 因为某些原因我需要将一个vector<vector<Point2f>> a[2]转化成 vector<vector<Point2d>>的形式,开始想用迭代器push_back来做,可是行不通, 这是我的代码: vector<vector<Point2d> > imagepoints[2]; vector...
  • 1、为什么需要主动释放vector内存 vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当...
  • C++ 中vector的使用方法

    万次阅读 多人点赞 2016-02-01 10:21:20
    C++ 中vector的使用方法(纯干货!)
  • 关于C++ vector 的问题

    2015-06-03 14:27:52
    #include<vector> #include using std::vector; using namespace std; int main() { int word; vector<int> var; vector<int> res_var; cout ; while (cin >> word){ var.push_back(word); for (vector...
  • vector insert用法 C++

    万次阅读 2017-08-29 13:02:10
    #include #include using namespace std; int main() ... vector v(3); v[0]=2; //v[0]是第0个元素 v[1]=7; v[2]=9; v.insert(v.begin(),8);//在最前面插入新元素。 v.insert(v.begin()+
  • Vector 嵌套 Vector

    千次阅读 2013-11-11 21:46:37
    #include #include using namespace std; int main() { ... int a[]={1,2,3,4,5,6,7,8,9,10... vector temp1(a,a+5),temp2(a+5,a+10); //创建两个vector对象,使用内容方式  vector > vec;  vec.push_back(temp
  • 对于那些有一点编程经验的人来说,vector,matrix,array,list,data.frame就相当于编程语言中的容器,因为只是将R看做数据处理工具所以它们的底层是靠什么实现的,内存怎么处理的具体也不要深究。 R语言很奇怪的是...
  • vector.resize 与 vector.reserve的区别

    万次阅读 2008-12-23 11:40:00
    reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后...
  • vector介绍

    千次阅读 2009-04-12 10:10:00
    vector介绍介绍std::vector,并且讨论它在STL中的算法和条件函数remove_if()。 介绍这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用...
  • vector<vector<cv::Mat>> map(bottom[0]->num(), vector(bottom[0]->channels(), cv::Mat(bottom[0]->height(), bottom[0]->width(), CV_32S, cv::Scalar(0)))); BlobToMat(*bottom[0], map); template void...
  • linux下写了一个程序,利用用到vector<vector<string> >inputData这样的数据结构,从oracle数据库表读取数据,读完之后,调用inputData.clear()清空容器,直接报段错误。 gdb 调试,bt给出的信息是 std::vector...
  • 读一个2016行的文件到vector里面,一直提示vector out of range。 我试着把vector大小改的很大还是有这个问题,所以不是一开始分配的大小不够,还有我测试过读文件的方法也是没有问题的。请问是哪里不对呢? ```...
  • C++(笔记)容器(vector)作为函数参数如何传参

    万次阅读 多人点赞 2017-05-17 17:51:54
    void 函数名( vector< int> obj ); void 函数名( vector* pobj ); void 函数名( const vector* pobj ); // 在函数内不能改变 pobj 指向的对象 ,//调用时不会调用拷贝构造函数 void 函数名( vector< int>& obj ...
  • 主要介绍了vector 容器大小相关的操作函数(size、max_szie、capacity),同时介绍了容器大小超出容器capacity能力会内存重新分配以及iterator失效简单分析。同时给出了避免内存重新分配的两种方法。
  • #include<vector> #include #include using namespace std; template class Vector { private: int size; T* list; public: Vector(int sz); Vector(int sz, T t(int s)); ~Vector(){ delete[] list; } ...
  • C++ vector的用法(整理)

    万次阅读 多人点赞 2018-08-31 14:36:03
    C++ vector的用法(整理) vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件: #include&lt;vector&gt;; 一、...
  • #include<vector> using namespace std; void merge( vector<int>& a, int first, int mid, int last ) { vector<int> s1; for (auto si = a.begin() + first; si () + mid; ++si) s1.push_back( *si ); ...
  • class Step ...如何在saveStep中使用vector容器保存Step数据(vector中的每个元素都是Step),unDo中调用saveStep的语句没有写上去,因为不知道怎么创建vector容器来存储自定义Step数据。 ``` ```

空空如也

1 2 3 4 5 ... 20
收藏数 206,593
精华内容 82,637
关键字:

vector