c++.Vector
vector是一个有序容器,底层是一个动态数组
容器,顾名思义,是用来容放东西的场所。C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的。众所周知,常用的数据结构不外乎:数组array, 链表list, 树tree, 栈stack, 队列queue, 散列表hash table, 集合set、映射表map 等等。容器便是容纳这些数据结构的。
vector的基本操作
(1)头文件#include.
(2)创建vector对象,vector vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector::iterator it;for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
vector的迭代器
普通指针即可满足vector对迭代器的需求。、
对于C语言的数组,我们使用普通指针就可以对数组进行各种操作。vector维护的是一个连续线性空间,与数组array一样,所以无论其元素型别为何,普通指针都可以作为vector的迭代器而满足所有必要的条件。vector所需要的迭代器操作,包括operator*,operator->,operator++,operator–,operator+=,operator-=等,普通指针都具有。
vector的内存分配
为了使vector容器实现快速的内存分配,其实际分配的容量要比当前所需的空间多一些,vector容器预留了这些额外的存储区用于存放添加的新元素。
需要注意的是,使用vector迭代器时要时刻注意vector是否发生了扩容,一旦扩容引起了空间重新配置,指向原vector的所有迭代器都将失效。
代码举例
#include<stdio.h>
#include
#include
#include
using namespace std;
typedef struct rect
{
int id;
int length;
int width;
bool operator< (const rect &a) const
{
if(id!=a.id)
return id<a.id;
else
{
if(length!=a.length)
return length<a.length;
else
return width<a.width;
}
}
}Rect;
int main()
{
vector
Rect rect;
rect.id=1;
rect.length=2;
rect.width=3;
vec.push_back(rect);
vector
cout<<(*it).id<<’ ‘<<(*it).length<<’ '<<(*it).width<<endl;
return 0;
}
return a>b;
拉普达表达式