C++的vector本质上是一个动态数组,数据量不大的情况下,非常方便存储和访问操作,当然,不好的情况是数据量大的情况下,查找效率低,删除操作还会导致大量的数组移动操作。
虽然这样,vector还是一个很有用的东西,可以满足很多开发需求。
1. vector的初始化
Vector是向量模板,C++ STL之一。前面说过vector是一个动态生长的数组,一开始vector为空时,会给一个初始化的容量(就是允许的添加个数),并申请好内存了,当往vector里面添加的元素超过现在的容量(capacity)时,就会重新更大申请内存,并把之前的所有元素,拷贝到新内存中。
因此,我们最好用到vector时,最好给他一个初始化大小,避免更多的内存申请动作和移动操作。
初始化vector元素的个数例子:
typedef std::vector < Type > VectorT;
VectorT a(10);
Type是类型,可以是结构体、整型、指针,类对象,指针函数等。
VectorT a(10);定义了一个初始化大小10,类型为Type的vector向量。定义后a有10个初始值为0的元素,因此要调用a.clear()把这些元素清空,清空后STL并不会销毁10个元素的内存。
其实初始化方法:
(1)初始化一个空的vector:
VectorT a;
(2)初始化n个值为value的vector
VectorT a( n , value);
2.添加元素(添加到末尾)
调用push_back()函数
void push_back (const value_type& val);
a是vector向量
a.push_back( val);
如果vector的容器已满,在末尾添加元素时会alloc申请更大的内存,并拷贝之前的元素到新内存,再把元素添加到vector容器末尾。
3.查找
调用find方法(需要include<algorithm>)
template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val)
如查找元素为value,找到则返回迭代器的位置,否则迭代器将指向end()
std::vector < Type >:: iterator iVector;
iVector = std::find(a.begin(), a.end() , value);
If( iVector != a.end())
{
找到了
}
Else
{
没找到。
}
4.遍历
利用迭代器,一开始迭代器iVector指向begin,只要不等于end,就继续遍历下去
typedef std::vector < Type > VectorT;
VectorT a;
VectorT::iterator iVector = a.begin();
while(iVector != a.end())
{
std::cout<<" dump "<< (*iVector)<<std::endl;
++iVector;
}
5.删除末尾元素或者删除全部元素。
(1)删除一个末尾元素
a.pop_back();
//删除操