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