当前位置:文档之家› C++_vector使用规范

C++_vector使用规范

C++中的vector使用规范一、概述vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。

vector是一个容器,它能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小。

Vector初始化vector<ElemType>创建一个空的vectorvector<ElemType> c1(c2)复制一个vector。

vector <ElemType> c(n)创建一个vector,含有n个数据,数据均已缺省构造产生。

vector <ElemType> c(n, elem)创建一个含有n个elem拷贝的vector。

vector <ElemType> c(beg,end)创建一个以[beg;end)区间的vector。

例如:vector<string> v3;vector<string> v(5,"hello");vector<string> v2(v.begin(),v.end());vector<string> v4(v);vector<int> v5(4);二、以上是vector容器的简单介绍,下面将详细介绍它的其他功能:1. 为了使用vector,必须在你的头文件中包含下面的代码:#include <vector>2. vector属于std命名域的,因此需要通过命名限定,可以在文件开头加上using std::vector; 或者using namespace std;或者直接在使用vector的代码前加前缀std::vector<int> myHouse;3. vector提供如下函数或操作:下面列举了部分常用的功能// 定义一个vectorstd::vector<int> c;// 可以使用的功能c.assign(beg,end)将[beg; end)区间中的数据赋值给cc.assign(n,elem)将n个elem的拷贝赋值给cc.clear() 移除容器中所有数据。

数组大小为0,内存不变c.empty() 判断容器是否为空。

为空返回1,否则返回0c.erase(pos) 删除pos位置的数据//pos为指针,数组大小size减1,内存不变c.erase(beg,end) 删除[beg,end)区间的数据// beg、end为指针,size减小,内存不变c.front() 传回第一个数据。

c.back() 传回最后一个数据,不检查这个数据是否存在c.insert(pos,elem)在pos位置插入一个elem拷贝,传回新数据位置c.insert(pos,n,elem)在pos位置插入n个elem数据,无返回值c.insert(pos,beg,end)在pos位置插入在[beg,end)区间的数据。

无返回值。

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

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

c.resize(num) 重新设置该容器的大小c.reserve(num) 重新设置预留空间的大小,功能类似resize,但有区别c.size() 回容器中实际数据的个数。

c.begin() 返回指向容器第一个元素的迭代器c.end() 返回迭代器中末端元素的下一个,指向一个不存在元素的指针c.rbegin() 返回Vector尾部的逆迭代器c.rend() 返回Vector起始的逆迭代器==、!=、<、<=、>、>= 保持这些操作符惯有含义c[n] 返回v中位置为n的元素,下标不能添加元素,只能操作存在的元素c.at(idx)传回索引idx所指的数据,如果idx越界,抛出out_of_rangec1.swap(c2)将c1和c2元素互换swap(c1,c2)同上操作c.~ vector <ElemType>()销毁所有数据,释放内存,即:size()为0,内存capacity()为0对于const vector<typeName>只能用vector<typeName>::const_iterator类型的指针访问两个vectors被认为是相等的,如果:1.它们具有相同的容量size() 与预留空间无关reserve()2.所有相同位置的元素相等.vectors之间大小的比较是按照词典规则三、下面描述一下什么是迭代器迭代器相当于指针,例如:// 定义一个迭代器std::vector<int>::iterator p;// 指向容器的首个元素for(vector<int>::iterator p= myVec.begin(); p!= myVec.end(); p++ )例:1.vector 的数据的存入和输出:#include<stdio.h>#include<vector>#include <iostream>using namespace std;void main(){int i = 0;vector<int> v;for( i = 0; i < 10; i++ ){v.push_back( i );//把元素一个一个存入到vector中}对存入的数据清空for( i = 0; i < v.size(); i++ )//v.size() 表示vector存入元素的个数{cout << v[ i ] << " "; //把每个元素显示出来}cout << endl;}注:你也可以用v.begin()和v.end() 来得到vector开始的和结束的元素地址的指针位置。

你也可以这样做:vector<int>::iterator iter;for( iter = v.begin(); iter != v.end(); iter++ ){cout << *iter << endl;}2. 对于二维vector的定义。

1)定义一个10个vector元素,并对每个vector符值1-10。

#include<stdio.h>#include<vector>#include <iostream>using namespace std;void main(){int i = 0, j = 0;//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。

所以每一行的长度是可以变化的。

之所以用到vector<int>(0)是对vector初始化,否则不能对vector存入元素。

vector< vector<int> > Array( 10, vector<int>(0) );for( j = 0; j < 10; j++ ){for ( i = 0; i < 9; i++ ){Array[ j ].push_back( i );}}for( j = 0; j < 10; j++ ){for( i = 0; i < Array[ j ].size(); i++ ){cout << Array[ j ][ i ] << " ";}cout<< endl;}}2)定义一个行列都是变化的数组。

#include<stdio.h>#include<vector>#include <iostream>using namespace std;void main(){int i = 0, j = 0;vector< vector<int> > Array;vector< int > line;for( j = 0; j < 10; j++ ){Array.push_back( line );//要对每一个vector初始化,否则不能存入元素。

for ( i = 0; i < 9; i++ ){Array[ j ].push_back( i );}}for( j = 0; j < 10; j++ ){for( i = 0; i < Array[ j ].size(); i++ ){cout << Array[ j ][ i ] << " ";}cout<< endl;}}使用vettor erase 指定元素#include "iostream"#include "vector"using namespace std;int main(){vector<int> arr;arr.push_back(6);arr.push_back(8);arr.push_back(3);arr.push_back(8);for(vector<int>::iterator it=arr.begin(); it!=arr.end(); ){if(* it == 8){it = arr.erase(it);}else{++it;}}cout << "After remove 8:\n";for(vector<int>::iterator it = arr.begin(); it < arr.end(); ++it) {cout << * it << " ";}cout << endl;}3、Vector删除操作内存比较#include<iostream>#include<vector>#include<cassert>#include<string>using namespace std;void main(){//vector 对象初始化vector<string> v(5,"hello");vector<string> v2(v.begin(),v.end());vector<string> v3;vector<string> v4(v);vector<int> v5(4);//vector对象操作成员函数assert(v==v4);v4.reserve(11);//预留内存大小,存储空间assert(v==v4);//v4.resize(11); //assert(v==v4);改变数组的大小v.push_back("li");v.push_back("si");v.push_back("laalaa");v.push_back("you");cout<<"v.size_1= "<<v.size()<<endl; //v.size_1= 9 cout << "capacity:" << v.capacity() << endl; //v.capacity:10 v.pop_back();v.pop_back();v.pop_back();cout<<"v.size_2 = "<<v.size()<<endl; //v.size_2= 6 cout << "capacity:" << v.capacity() << endl; //v.capacity:10 v.erase(v.begin());cout<<"v.size_3 = "<<v.size()<<endl; //v.size_3= 5 cout << "capacity:" << v.capacity() << endl; //v.capacity:10 v.clear();cout<<"v.size_4 = "<<v.size()<<endl; //v.size_4=0 cout << "capacity:" << v.capacity() << endl; //v.capacity:10 v.~vector<string>();cout<<"v.size_5 = "<<v.size()<<endl; //v.size_5=0 cout << "capacity:" << v.capacity() << endl; //v.capacity:0 }。

相关主题