向量(vector)是一种随机访问的数组类型,提供了对数组元素的快速,随机访问,以及在序列尾部快速随机的插入和删除操作。它在需要时还可以改变其大小,是大小可变的向量。
为什么说vector是随机访问呢?解释这个可以参考链表(list)。
因为是一种随机访问的数据类型,不同向量中的每个元素并不在同一块内存空间。
下面写一些简单的vector的个功能应用的例子(具体功能代码中有注释):
注:vector不适合做有大量插入删除操作的容器,因为拷贝内存本身浪费很大。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void output(int n)
{
cout<<n<<" ";
}
bool compare(int a,int b)
{
return (a>b);//a<b:升序,a>b:降序
}
int main()
{
vector<int> int_num;
for(int i=10;i>1;i--)//赋值
int_num.push_back(i);
cout<<"int_num1:"<<endl;
cout<<"原始数字:";
for_each(int_num.begin(),int_num.end(),output);//第一种输出
cout<<endl;
cout<<"升序输出:";
sort(int_num.begin(),int_num.end());
//for_each(int_num.begin(),int_num.end(),output);
for(vector<int>::iterator it=int_num.begin();it!=int_num.end();it++)//第二种输出
{
//cout<<*it<<" ";
cout<<it[0]<<" ";
}
cout<<endl;
cout<<"降序输出:";
sort(int_num.begin(),int_num.end(),compare);
int Size=int_num.size();
for(int i=0;i<Size;i++)//第三种输出
{
cout<<int_num[i]<<" ";
//cout<<int_num.at(i)<<" ";
}
cout<<endl;
cout<<"最后增加一个数字:";
int_num.push_back(25);//在Vector最后添加一个元素
for_each(int_num.begin(),int_num.end(),output);
cout<<endl;
cout<<"删除最后一个数字:";
int_num.pop_back();//移除最后一个元素
for_each(int_num.begin(),int_num.end(),output);
cout<<endl;
cout<<"删除中间数字:";
int_num.erase(int_num.begin()+2);//删除 int_num[2]
for_each(int_num.begin(),int_num.end(),output);
cout<<endl;
cout<<"返回第一个数字:"<<int_num.front()<<endl;
cout<<"返回最末一个数字:"<<int_num.back()<<endl;
vector<int> int_num2;
cout<<"int_num2:"<<endl;
cout<<"原始数字:";
//int_num2.assign(3,10);//赋3个值为10的元素到vector中 会覆盖
int_num2.assign(int_num.begin(),int_num.end());//对Vector中的元素赋值
for_each(int_num2.begin(),int_num2.end(),output);
cout<<endl;
cout<<"插入数字后:";
vector<int>::iterator it=int_num2.begin();
int_num2.insert(it,3,100);//开始位置加入3个100
//int_num2.insert(int_num2.begin()+1,100);//begin+1位置加入一个100
for_each(int_num2.begin(),int_num2.end(),output);
cout<<endl;
vector<int>::iterator result = find(int_num2.begin(),int_num2.end(),5);//查找数字
if(result==int_num2.end())
cout<<"No find"<<endl;
if(result!=int_num2.end())
cout<<"Find :"<<*result<<endl;;
swap(int_num,int_num2);//交换两个vector
cout<<"交换后int_num:";
for_each(int_num.begin(),int_num.end(),output);
cout<<endl;
cout<<"交换后int_num2:";
for_each(int_num2.begin(),int_num2.end(),output);
cout<<endl;
system("pause");
return 0;
}