C++ 中vector的基本用法

//在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少

基本概念

vector容器是一个模板类,可以存放任何类型的对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。

1、定义和初始化

* vector< 类型名 > 标识符 (n)   //定义容器大小为n 

*   vector< 类型名 > 标识符(最大容量,初始所有值);

eg: vector< int > ivec( 10, -1 ); 定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1

*   vector<类型名> vector<typeName>v2(v1);    或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());

//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。

*   拷贝数组中的元素:int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 };

// 把 ia 的 6 个元素拷贝到 ivec 中 vector< int > ivec( a, a+6 );

// 拷贝 3 个元素 a[2], a[3], a[4] vector< int > ivec( &a[ 2 ], &a[ 5 ] );     //注意第二个指正要指到末尾元素的下一个元素

以下是事例:

 1 #include<iostream>
 2 #include <vector>
 3 using namespace std;
 4 int main(){
 5     int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
 6     //拷贝数组中的元素
 7     vector< int > vec1( a, a+6 );  
 8     cout<<vec1[0]<<' '<<vec1[1]<<' '<<vec1[2]<<' '<<vec1[3]<<endl;
 9 
10     //拷贝数组中的元素
11     //两个指针标记了对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置
12     vector< int > vec( &a[ 2 ], &a[5] );
13     cout<<vec[0]<<' '<<vec[1]<<' '<<vec[2]<<' '<<vec[3]<<endl;  //vec[3]输出错误,因为不存在
14     
15     //把vec 拷贝到另一个容器中
16     vector< int > newone;
17     newone = vec;
18     cout<<newone[0]<<endl;
19     return 0;
20 }

 

常用方法

c.clear()                              移除容器中所有数据。

c.empty()                            判断容器是否为空。

c.erase(pos)                       删除pos位置的数据

c.erase(beg,end)               删除[beg,end)区间的数据

c.front()                              传回第一个数据。

c.insert(pos,elem)              在pos位置插入一个elem拷贝

c.pop_back()                     删除最后一个数据。

c.push_back(elem)            在尾部加入一个数据。

c.resize(num)                     重新设置该容器的大小

c.size()                              返回容器中实际数据的个数。

c.begin()                           返回指向容器第一个元素的迭代器

c.end()                              返回指向容器最后一个元素的迭代器

使用迭代器

迭代器:迭代器是个所谓的智能指针,具有遍历复杂数据结构的能力,就看做是容器的专用指针吧,用容器时一般都要使用到这个,那种用数组索引的方法反而更加少用了,下面是一个简单的使用迭代器的示例: 

 1 //利用迭代器更改容器中的某一个值
 2 #include<iostream>
 3 #include<vector>
 4 using namespace std;
 5 int main(){
 6     vector<int> abc;
 7     abc.push_back(1);       //push几个值进去
 8     abc.push_back(5);
 9     abc.push_back(3);        
10     abc.push_back(4);
11      
12      //   迭代器遍历寻遍
13     for(vector<int>::iterator it = abc.begin();it!=abc.end();)
14     {
15         if(*it ==4)
16             it = abc.erase(it);
17         else
18             ++it;
19     }
20     cout << "After remove 5:\n";
21    for(vector<int>::iterator i = abc.begin(); i < abc.end(); ++i)
22    {
23        cout << * i << " ";
24    }
25    cout << endl;
26    return 0;
27 }

 

以下是一些简单的程序:

定义一个二维数组

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int main(){
 5     int i = 0,j = 0;    //容器内部的容器 
 6     //Array  是10行,且都为0
 7     vector< vector<int> > Array(10,vector<int>(0));
 8 
 9     for(j = 0; j < 10; j++)
10     {
11         for (i = 0; i < 9; i++)
12             {
13                 Array[j].push_back(i);
14              }
15     }
16   //输出
17     for( j = 0; j < 10; j++ )
18     {
19         for(i = 0; i<Array[j].size(); i++)
20         {
21             cout << Array[j][i] << " ";
22         }
23             cout<< endl;
24     }
25 }

 

排序与逆向

 1 #include<iostream>
 2 #include<vector>
 3 #include<algorithm>
 4 #include <cstdlib>
 5 using namespace std;
 6 int main(){
 7     vector<int>  num;
 8     int element;
 9     while(cin>>element)
10         num.push_back(element);
11 
12     sort(num.begin(),num.end());             //从大到小排序
13     
14     reverse(num.begin(),num.end());          //逆向输出
15 
16     for(int i = 0;i<num.size();i++)
17         cout<<num[i]<<endl;
18 
19     system("pause");
20         return 0;
21 }

 

定义二维动态数组

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int main(){
 5     int i = 0,j = 0;
 6     vector<vector<int> >  Array;
 7     vector<int>  line;
 8     for(j = 0;j < 20;j++){
 9         Array.push_back(line);     //要对每一个vector初始化,初始化列。
10         for (i = 0; i < 9; i++ )
11          {
12             Array[ j ].push_back( i );
13         }
14     }
15 
16     for(j = 0;j < 10;j++ )
17     {
18          for(i = 0; i<Array[j].size(); i++)
19         {
20             cout << Array[j][i] << " ";
21         }
22          cout<< endl;
23     }
24 }

 

参考:http://blog.csdn.net/xiaohuizi2009/article/details/8067667

posted @ 2013-08-06 21:58  兰幽  阅读(526)  评论(0编辑  收藏  举报