您的位置:首页 > 编程语言 > C语言/C++

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

2014-03-19 19:02 267 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: