vector对象的定义和初始化

来源:互联网 发布:js设置html标签隐藏 编辑:程序博客网 时间:2024/05/16 09:32

vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>

一、vector对象的定义和初始化

  几种初始化vector对象的方式

vector<T>  v1;vector保存类型为T的对象。默认构造函数v1为空。vector<T> v2(v1);v2是v1的一个副本。vector<T> v3(n, i);v3包含n个值为i的元素。vector<T> v4(n);v4含有值初始化的元素的n个副本。

1. 创建确定个数的元素

若要创建非空的vector对象,必须给出初始化元素的值。当把一个vector对象复制到另一个vector对象时,新复制的vector中每一个元素都初始化为原vector中相应元素的副本。但这两个vector对象必须保存同一种元素类型:

vector ivec1;                // ivec1 holds objects of type int
vector ivec2(ivec1);       // ok: copy elements of ivec1 into ivec2
vector svec(ivec1);    // error: svec holds strings, not ints

可以用元素个数和元素值对vector对象进行初始化。构造函数用元素个数来决定vector对象保存元素的个数,元素值指定每个元素的初始值:

vector ivec4(10, -1);     // 10 elements, each initialized to -1
vector svec(10, "hi!"); // 10 strings, each initialized to "hi!"

更有效的方法是先初始化一个空vector对象,然后再动态地增加元素

2. 值初始化

如果vector保存内置类型(如int类型)的元素,那么标准库将用0值创建元素初始化值:

vector fvec(10); // 10 elements, each initialized to 0

如果向量保存类类型(如string)的元素,标准库将用该类型的默认构造函数创建元素初始值:

vector svec(10); // 10 elements, each an empty string

3、成员函数  如:vector<T>c;
1)c.assign(beg,end)   //  将[beg; end)区间中的数据赋值给c   ???这句是不是有问题,

      c.assign(n,elem)    //   将n个elem的拷贝赋值给c。

       c.assign(3,2); //将3个int,值 都是2的元素赋值给C


2)   c.at(idx)                 // 传回索引idx所指的数据,如果idx越界,抛出out_of_range。

3)   c.back()      // 传回最后一个数据,不检查这个数据是否存在。
4)   c.begin()     // 传回迭代器中的第一个数据地址。
5)   c.capacity()  // 返回容器中数据个数。
6)c.clear()     // 移除容器中所有数据。
7)c.empty()     // 判断容器是否为空。
8)c.end()       // 指向迭代器中末端元素的下一个,指向一个不存在元素。
9)c.erase(pos)  // 删除pos位置的数据,传回下一个数据的位置。
10)c.erase(beg,end)  //删除[beg,end)区间的数据,传回下一个数据的位置。
11)c.front()     // 传回第一个数据。

12)get_allocator // 使用构造函数返回一个拷贝。

13)c.insert(pos,elem)    // 在pos位置插入一个elem拷贝,传回新数据位置。
14)c.insert(pos,n,elem)  // 在pos位置插入n个elem数据。无返回值。
15)c.insert(pos,beg,end) // 在pos位置插入在[beg,end)区间的数据。无返回值。
  
16)c.max_size()       // 返回容器中最大数据的数量。
17)c.pop_back()       // 删除最后一个数据。
18)c.push_back(elem)  // 在尾部加入一个数据。
19)c.rbegin()         // 传回一个逆向队列的第一个数据。
20)c.rend()           //函数返回指向当前vector起始位置的逆迭代器.
21)c.resize(num,val)      // 重新指定队列的长度,且对新创建的元素赋值val
22)c.reserve()        // 保留适当的容量。
23)c.size()           // 返回容器中实际数据的个数
24)c1.swap(c2)
25)swap(c1,c2)        // 将c1和c2元素互换。同上操作。

26)operator[]         // 返回容器中指定位置的一个引用。

[cpp] view plain copy print?
  1. // testtest.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <stdio.h>  
  6. #include <iostream>  
  7. #include <vector>  
  8. #include "hongdingyi.h"  
  9. using namespace std;  
  10.   
  11. void test_vector_insert( )  
  12. {  
  13.     vector <int> v1;  
  14.     vector <int>::iterator Iter;  
  15.   
  16.     v1.push_back( 10 );  
  17.     v1.push_back( 20 );  
  18.     v1.push_back( 30 );  
  19.   
  20.     cout << "v1 =" ;  
  21.     for ( Iter = v1.begin( );Iter != v1.end( ) ; Iter++ )  
  22.     {  
  23.         cout << " " << *Iter;  
  24.     }  
  25.     cout << endl;  
  26.   
  27.     v1.insert( v1.begin( ) + 1, 40 );  
  28.     cout << "v1 =";  
  29.     for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )  
  30.     {  
  31.         cout << " " << *Iter;  
  32.     }  
  33.     cout << endl;  
  34.   
  35.     v1.insert( v1.begin( ) + 2, 4, 50 );  
  36.     cout << "v1 =";  
  37.     for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )  
  38.     {  
  39.         cout << " " << *Iter;  
  40.     }  
  41.     cout << endl;  
  42.   
  43.     v1.insert( v1.begin( )+1, v1.begin( )+2, v1.begin( )+4 );// 在 v1.begin( )+1 位置插入在[v1.begin( )+2,v1.begin( )+4)区间的数据。无返回值  
  44.     cout << "v1 =";  
  45.     for (Iter = v1.begin( ); Iter != v1.end( ); Iter++ )  
  46.     {  
  47.         cout << " " << *Iter;  
  48.     }  
  49.     cout << endl;  
  50.   
  51.     //用下面这种形式也可以的  
  52.     vector<char> alphaVector;  
  53.     for (int i=0;i<5;i++)  
  54.     {  
  55.         alphaVector.push_back(i+65);  
  56.     }  
  57.     vector<char>::iterator theIterator = alphaVector.begin();  
  58.     alphaVector.insert(theIterator,4,'C');  
  59.     alphaVector.insert(alphaVector.begin()+2,'1');  
  60.     for (theIterator=alphaVector.begin();theIterator!=alphaVector.end();theIterator++)  
  61.     {  
  62.         cout<<*theIterator<<"  ";  
  63.     }  
  64.     cout<<endl;  
  65. }  
  66.   
  67.   
  68. int _tmain(int argc, _TCHAR* argv[])  
  69. {  
  70.           
  71.     vector<int> ::iterator it;  
  72.     vector<int> vec(5,3);   
  73.     for (it=vec.begin();it!=vec.end();it++)  
  74.     {  
  75.         cout<<*it<<"  ";//3 3 3 3 3   
  76.     }  
  77.     cout<<endl;  
  78.     vec.assign(3,2);// 将3个int,值都是2的像素赋值给vec,这里vec以前的像素都被覆盖  
  79.     for (it=vec.begin();it!=vec.end();it++)  
  80.     {  
  81.         cout<<*it<<"  ";//结果:2 2 2  
  82.     }  
  83.     cout<<endl;  
  84.     vector<int> v1;  
  85.     for (int i=1;i<=3;i++)  
  86.     {  
  87.         v1.push_back(i);  
  88.     }  
  89.     v1.resize(6,8);//第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,即容器大小为6,多出的两个空间都初始化为8  
  90.     for (it=v1.begin();it!=v1.end();it++)  
  91.     {  
  92.         cout<<*it<<"  ";//结果:1 2 3 8 8 8  
  93.     }  
  94.     cout<<endl;  
  95.     //下面的for 与上面的for循环功能是一样的,都是显示容器V1中的元素。  
  96.     for(int i=0;i<v1.size();i++)//resize与reserver并不会删除原先的元素以释放空间  
  97.     {  
  98.         cout<<v1[i]<<"  ";//结果:1 2 3 8 8 8  
  99.     }  
  100.     cout<<endl;  
  101.     cout <<"v1.size:"<<v1.size()<<endl;//结果:6  
  102.     v1.reserve(8);//保证vector的空间大小(capacity)最少达到它的参数所指定的大小  
  103.     cout <<"v1.capacity:"<<v1.capacity()<<endl;//结果:8  
  104.   
  105.     vector<int>::reverse_iterator pos;  
  106.     pos = v1.rend();  
  107.     pos--;  
  108.     cout<<*pos<<"  ";  
  109.     pos--;  
  110.     cout<<*pos<<endl;  //上面两个cout 输出  1  2  
  111.   
  112.     pos=v1.rbegin();  
  113.     pos++;  
  114.     cout<<*pos<<endl;//结果:8  
  115.       
  116.     test_vector_insert();//几个insert函数的用法  
  117.   
  118.   
  119.     system("pause");  
  120.     return 0;  
  121. }  
0 0
原创粉丝点击