vector构造函数
向量(vector容器类)vector是一种动态数组,是基本数组的类模板。vector 类中定义了4中种构造函数:
1、默认构造函数,构造一个初始长度为0的空向量,如:vector<int> v1;
2、带有单个整形参数的构造函数,此参数描述了向量的初始大小。这个构造函数还有一个可选的参数,这是一个类型为T的实例,描述了各个向量种各成员的初始值;如:vector<int> v2(n,0);定义长为n的vector,每个vector的元素值是0。
3、复制构造函数,构造一个新的向量,作为已存在的向量的完全复制,如:vector<int> v3(v2);
4、带两个常量参数的构造函数,产生初始值为一个区间的向量。区间由一个半开区间[first,last) 来指定。如:vector<int> v4(first,last)
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;
int ar[10] = { 12, 45, 100, 23, 22, 35, 63, 11, 2, 55 };
char* str = "Hello World";
int _tmain(int argc, _TCHAR* argv[])
{
vector <int> vec0;
vector <int> vec1(ar, ar+10); //first=ar,last=ar+10,不包括ar+10
vector <char> vec2(str,str+strlen(str)); //first=str,last= str+strlen(str),
vector <int> vec3(10, 0);
vector <char> vec4(vec2);
cout<<"vec0:"<<endl;
for(vector<int>::const_iterator p=vec0.begin();p!=vec0.end(); ++p)
cout<<*p<<" ";
cout<<endl<<"vec1:"<<endl;
for(vector<int>::const_iterator p=vec1.begin();p!=vec1.end(); ++p)
cout<<*p<<" ";
cout<<endl<<"vec2:"<<endl;
for(vector< char >::const_iterator p=vec2.begin();p!=vec2.end(); ++p)
cout<<*p;
cout<<endl<<"vec3:"<<endl;
for(vector<int>::const_iterator p=vec3.begin();p!=vec3.end(); ++p)
cout<<*p<<" ";
cout<<endl<<"vec4:"<<endl;
for(vector< char >::const_iterator p=vec4.begin();p!=vec4.end(); ++p)
cout<<*p;
cout<<endl;
getchar();
return 0;
}
运行结果:
vector成员函数
为了帮助理解向量的概念,这里写了一个小例子,其中用到了vector的成员函数:begin(),end(),push_back(),assign(),front(),back(),erase(),empty(),at(),size()。
#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int ar[20] = {
12, 45, 100, 23, 22,
35, 63, 11, 2, 55,
3, 12, 66, 88, 70,
33, 33, 24, 75, 16 };
void showVector(string infos,vector <int> vec1);
void showVector(string infos,vector <int> vec1){
infos=infos+"vec1:";
cout<<endl<<infos<<endl;
for(vector<int>::const_iterator p=vec1.begin();p!=vec1.end(); ++p)
cout<<*p<<" ";
}
int _tmain(int argc, _TCHAR* argv[])
{
vector <int> vec1(ar, ar+20);
showVector("原vector ",vec1);
//测试添加和插入成员函数,vector不支持从前插入
vec1.push_back(2);//从后面添加一个成员
showVector("push_back(2) ",vec1);
//测试移出和删除
vec1.pop_back();//将最后一个成员移出vec1
showVector("pop_back() ",vec1);
vec1.insert(vec1.begin()+1,5);//在vec1第一个的位置上插入成员5
showVector("insert(vec1.begin()+1,5) ",vec1);
//测试引用类函数
cout<<endl<<"vec1.front()="<<vec1.front()<<endl;//vec1第零个成员
cout<<"vec1.back()="<<vec1.back()<<endl;//vec1的最后一个成员
cout<<"vec1.at(4)="<<vec1.at(4)<<endl;//vec1的第五个成员
cout<<"vec1[4]="<<vec1[4];
vec1.erase(vec1.begin()+1,vec1.end()-2);//删除成员
showVector("erase(vec1.begin()+1,vec1.end()-2); ",vec1);
cout<<endl<<"vec1.size(): "<<vec1.size();//打印成员个数
//从vec1第一的位置开始插入vec3的所有成员
//vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end());
//测试赋值成员函数
vec1.assign(8,1); // 重新给vec2赋值,8个成员的初始值都为1
showVector("assign(8,1) ",vec1);
//显示序列的状态信息
cout<<endl<<"vec1.size(): "<<vec1.size()<<endl;//打印成员个数
cout<<"vec1.empty(): "<<vec1.empty();//是否为空
vec1.erase(vec1.begin(),vec1.end());
showVector("erase(vec1.begin(),vec1.end()) ",vec1);
cout<<endl<<"vec1.size(): "<<vec1.size()<<endl;//打印成员个数
cout<<"vec1.empty(): "<<vec1.empty();//是否为空
getchar();
return 0;
}
运行结果: