概述 C++中的容器大致分为两类:顺序容器和关联容器。以后会逐一讲解。本文主要讲解顺序容器中的vector。 想要使用vector,需要包含头文件vector,即#include<vector>。vector可以理解为可以动态变换长度的数组。
1.定义和初始化
vector<int> vec0;
这种定义只是定义vec0是一个vector,默认大小为0。
vector<int> vec1(10);//初始化vec1,初始化为10个0
这种定义是定义一个vec1,并初始化其长度为10,每个元素默认初始化为0。
vector<int> vec2(10,999);//初始化vec2,初始化为10个999
这种定义是定义一个vec2,并初始化其长度为10,每个元素初始化为999。
vector<int> vec2(vec1);//使用vec1初始化vec2,将vec2初始化为何vec1相同
vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec3,将vec3初始化为何vec1相同
这两种定义都是将vec1复制给新的vector。 在此处出现了两个函数begin()和end()。有必要说明一下这两个函数的作用。以begin()为例,函数原型分为两类:iterator begin()、const_iterator begin()。功能是返回一个当前vector容器中起始元素的迭代器(可直接理解为首地址指针)。end同理。这里的两个迭代器很重要,以后会用的很多。vector还可以采用下标访问各个元素,可一旦到了后面的容器,就不一定可以使用了,因此,迭代器法访问元素必须要会。 2.常见操作
vec1.push_back(100);//添加元素
该操作表示在vec1末尾添加一个元素100
while(!vec1.empty()){//empty 为空时返回值是1,不空返回值是0
cout<<vec1[vec1.size()-1]<<endl;
vec1.pop_back();//vec1.pop_back删除末尾元素
}
empty()函数表示当前vector是否为空,为空返回1,不空返回0;pop_back()弹出(删除)末尾元素。
vec1.insert(vec1.end(),5,3);//在末尾插入5个3
insert()函数有三个参量。
cout<<(vec1==vec2)?true:false; //判断是否相等==、!=、>=、<=...
判断两个vector是否相等。
3.元素获取(遍历方法)
对于vector遍历方法,可以分为两种:下标法和迭代器法。可以思考一下为何支持下标法访问(我的想法为:vector是以数组的方式存取的,因此支持利用下标随机访问)。
//遍历获取元素
//1.迭代器法
vector<int>::iterator iter = vec2.begin();
for(;iter!=vec2.end();iter++){
cout<<*iter<<endl;
}
//2.下标法
for(int i=0;i<vec2.size();i++){
cout<<vec2[i]<<endl;
}
4.以上代码的可执行文件
#include <iostream>
#include <vector>
using namespace std;
//就是一个动态数组
int main()
{
//1.定义和初始化
vector<int> vec0;
vector<int> vec1(10,999);//初始化vec1,初始化为10个999
for(int i=0;i<vec1.size();i++){
vec1[i]=i+1;
}
vector<int> vec2(vec1);//使用vec1初始化vec2,将vec2初始化为何vec1相同
vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec3,将vec3初始化为何vec1相同
//2.对vector操作
vec1.push_back(100);//添加元素
while(!vec1.empty()){//empty 为空时返回值是1,不空返回值是0
cout<<vec1[vec1.size()-1]<<endl;
vec1.pop_back();//vec1.pop_back删除末尾元素
}
cout<<endl;
vec1.insert(vec1.end(),5,3);//在末尾插入5个3
for(int i=0;i<vec1.size();i++){
cout<<vec1[i]<<endl;
}
cout<<endl;
for(int i=0;i<vec1.size();i++){
vec1[i]=i+1;
}
//vec1.erase(vec1.begin()+1,vec1.end()-1);//删除之间的元素,其他元素前移 两个元素都是迭代器
cout<<(vec1==vec2)?true:false; //判断是否相等==、!=、>=、<=...
cout<<endl;
//遍历获取元素
vector<int>::iterator iter = vec2.begin();//获取迭代器首地址->迭代器就是地址
for(;iter!=vec2.end();iter++){
cout<<*iter<<endl;
}
//当然了,肯定可以用下标
for(int i=0;i<vec2.size();i++){
cout<<vec2[i]<<endl;
}
//getchar();
//getchar();
return 0;
}