C++基础:C++中vector使用简介


vector是C++标准库中的一个类,与数组颇为相似,不同之处在于,vector可以自动扩展容量,故可以将其视为会自动扩展容量的数组。vector是C++标准程序库中的众多容器(container)之一,能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型数据的动态数组。

为了可以使用vector,需要在你的头文件中包含下面的代码:

#include <vector>

using namespace std;


以下着重介绍vector的常见用法:

1)  创建一个vector,有多种方法。

vector< 类型 > 标识符 ; //如vector< int> Vint ;
vector< 类型 > 标识符(最大容量) ; // 如vector< int> Vint(100)创建包含100个int数据的vector ;
vector< 类型 > 标识符(最大容量,初始所有值); // 如vector< int> Vint(100,int(10))极为创建包含100个int数据(均初始化为10)的vector ;
vector< 类型 > 标识符(该类型vector对象); // 如vector< int> Vint2(Vint)创建了一个Vint的拷贝

2)  利用数组初始化vector  

int i[10] ={0,1,2,3,4,5,6,7,8,9} ; 
vector<int> v(i+1,i+9);//使用数组对C++ Vector进行初始化

其中i+1,i+9表示从数组的第一个值到第九个值之前的值,即i[1]到i[8]


3)  vector二维对象定义,相当于二维数据。

vector< int > v(100,int(9));//创建包含100个int数据的vector 
vector< vector<int> > v2;//二维容器
for(int i =0;i<10;i++)
{
	v2.push_back(v);
}


4) 元素访问方法

  • vec[i] - 访问索引值为 i 的元素引用。 (索引值从零起算,故第一个元素是vec[0]。)
  • vec.at(i) - 访问索引值为 i 的元素的引用,以 at() 访问会做数组边界检查,如果访问越界将会抛出一个例外,这是与operator[]的唯一差异。
  • vec.front() - 回传 vector 第一个元素的引用。
  • vec.back() - 回传 vector 最尾元素的引用。

5) 新增或移除元素

  • vec.push_back() - 新增元素至 vector 的尾端,必要时会进行存储器配置。
  • vec.pop_back() - 删除 vector 最尾端的元素。
  • vec.insert() - 插入一个或多个元素至 vector 内的任意位置。
  • vec.erase() - 删除 vector 中一个或多个元素。
  • vec.clear() - 清空所有元素。

6)   取得长度/容量

  • vec.size() - 取得 vector 目前持有的元素个数。
  • vec.empty() - 如果 vector 内部为空,则传回 true 值。
  • vec.capacity() - 取得 vector 目前可容纳的最大元素个数。这个方法与存储器的配置有关,它通常只会增加,不会因为元素被删减而随之减少。

7)   重新配置/重设长度

  • vec.reserve() - 如有必要,可改变 vector 的容量大小(配置更多的存储器)。在众多的 STL 实做,容量只能增加,不可以减少。
  • vec.resize() - 改变 vector 目前持有的元素个数。

8)  迭代 (Iterator)

  • vec.begin() - 回传一个Iterator,它指向 vector 第一个元素。
  • vec.end() - 回传一个Iterator,它指向 vector 最尾端元素的下一个位置(请注意:它不是最末元素)。
  • vec.rbegin() - 回传一个反向Iterator,它指向 vector 最尾端元素的。
  • vec.rend() - 回传一个Iterator,它指向 vector 的第一个元素。

9)  vector排序

vector< int > v ;   
v.push_back(11);  
v.push_back(7);  
v.push_back(15);  
sort(v.begin() , v.end()); // 从小到大  
reverse(v.begin(),v.end()) // 从大到小

10) vector查找

vector < int > v ;   
for( int i = 0 ; i < 10 ; i ++ )  
{  
	vector.push_back(i);  
}   
vector < int >::interator itr = find(v.begin() , v.end(), 7) ;  //find方法需引入#include<algorithm>>
cout << *itr << endl ; ///返回容器内找到值的位置。 


11) vector访问

for(int i = 0 ; i < 10 ; i ++) // 第一种方法  
	cout <<v[i] <<" " ;   
cout<<endl;

vector<int>::iterator itr;
for(itr = v.begin();itr!= v.end();itr++)//第二种方法
	cout<<*itr<<" ";
cout<<endl;


一段完整代码示例:

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main(int argc,char* argv[])
{
	int i[11] ={0,1,2,3,4,5,6,7,8,9,10} ; 
	vector<int> v(i,i+10);//使用数组对vector进行初始化
	//vector< int > v(100,int(9));//创建包含100个int数据的vector ;
	//vector< int > v ;

    // for(int i = 0; i < 10; i++ )//插入项方式初始化
	//	v.push_back( i );

	vector<vector<int>> v2;//二维容器
	for(int i =0;i<10;i++)
	{
		v2.push_back(v);
	}

	cout<<"方法一输出:"<<endl;
	for(int i = 0 ; i < 10 ; i ++) // 第一种方法  
		cout <<v[i] <<" " ;   
	cout<<endl;

	cout<<"方法二输出:"<<endl;
	vector<int>::iterator itr;
	for(itr = v.begin();itr!= v.end();itr++)//第二种方法
		cout<<*itr<<" ";
	cout<<endl;

	vector<int>::iterator itr2 = find(v.begin(),v.end(),7);//查找
		cout<<"数据7的位置"<< *itr2<<endl;

	system("pause");
	return 0;
}









posted @ 2014-03-19 19:02  F8Master  阅读(205)  评论(0编辑  收藏  举报