C++ vector 容器
一、什么是vector?
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
二、容器特性
1.顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
2.动态数组
支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。
3.能够感知内存分配器的(Allocator-aware)
容器使用一个内存分配器对象来动态地处理它的存储需求。
三、基本用法
#include < vector>
using namespace std;
四、简单介绍
Vector<类型>标识符
Vector<类型>标识符(最大容量)
Vector<类型>标识符(最大容量,初始所有值)
Int i[5]={1,2,3,4,5}
Vector<类型>vi(I,i+2);//得到i索引值为3以后的值
Vector< vector< int> >v; 二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过

五、实例

#include <vector>
#include <iostream>
using namespace std;
void vector1()
{
vector<int> obj;
for (int i=0 ;i<10;i++)
{
obj.push_back(i);//push_back 在数组的最后添加一个数据
cout<<obj[i]<<",";
}
cout<<endl;
cout<<obj.size();
for (int i=0;i<5;i++)
{
obj.pop_back();//void pop_back():删除向量中最后一个元素
}
cout<<endl;
cout<<obj.size();
cout<<endl;
for (int i=0;i<obj.size();i++)
{
cout<<obj[i]<<",";
}
obj.clear();//清除容器中所以数据
cout<<endl;
cout<<obj.size();
}
#include <algorithm>
void vector2()
{
vector<int> obj;
obj.push_back(1);
obj.push_back(3);
obj.push_back(0);
sort(obj.begin(),obj.end());//从小到大排列
for (int i=0;i<obj.size();i++)
{
cout<<obj[i]<<",";
}
cout<<endl;
reverse(obj.begin(),obj.end());//从大到小排列
for (int i=0;i<obj.size();i++)
{
cout<<obj[i]<<",";
}
}
void vector3()
{
//访问 (直接数组访问&迭代器访问)
//顺序访问
vector<int>obj;
for(int i=0;i<10;i++)
{
obj.push_back(i);
}
cout<<"直接利用数组:";
for(int i=0;i<10;i++)//方法一
{
cout<<obj[i]<<" ";
}
cout<<endl;
cout<<"利用迭代器:" ;
//方法二,使用迭代器将容器中数据输出
vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
for(it=obj.begin();it!=obj.end();it++)
{
cout<<*it<<" ";
}
}

void vector4()
{
//二维数组两种定义方法
int N=5, M=6;
vector<vector<int> > obj(N); //定义二维动态数组大小5行
for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0
{
obj[i].resize(M); //resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
}
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<endl;
}
}

void vector5()
{
int N=5, M=6;
vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
}