Vector介绍
vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随机存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。
Vector与List,Deque等队列容器的区别:
顺序容器类,允许对容器中所有数据的快速随机访问。
何时选用Vector:
如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 。
迭代器:
vector<Type>::iterator iter;
vector<Type>::reverse_iterator reverseIter;
(1) 构造函数
vector<Elem> c 创建一个空的vector。
vector <Elem> c1(c2) 复制一个vector。
vector <Elem> c(n) 创建一个vector,含有n个数据,数据均已缺省构造产生。
vector <Elem> c(n, elem) 创建一个含有n个elem拷贝的vector。
vector <Elem> c(beg,end) 创建一个以[beg;end)区间的vector。
(2) 大小、判断函数
Int size() const:返回容器元素个数
bool empty() const:判断容器是否为空,若为空则返回true
max_size() 返回容器中最大数据的数量。
capacity() 返回vector当前分配的存储长度。
(3) 增加、删除函数
void push_back(const T& x):list元素尾部增加一个元素x
void pop_back():删除容器尾元素,当且仅当容器不为空
void clear():删除容器中的所有元素
iterator insert(iterator it, const T& x ):在迭代器指针it前插入元素x,返回x迭代器指针
void insert(iterator it,size_type n,const T& x):迭代器指针it前插入n个相同元素x
void insert(iterator it,const_iterator first,const_iteratorlast):把[first,last)间的元素插入迭代器指针it前
emplace_back 在vector的最后面插入一个数据
emplace 在vector的指定位置插入一个数据
iterator erase(iterator it):删除迭代器指针it对应的元素
iterator erase(iterator first,iterator last):删除迭代器指针[first,last)间的元素
(4) 遍历函数
iterator begin():返回首元素的迭代器指针(cbegin()返回指向vector开始位置的const迭代器)
iterator end():返回尾元素之后位置的迭代器指针(cend()返回指向vector结尾之后位置的const迭代器)
reverse_iterator rbegin():返回尾元素的逆向迭代器指针,用于逆向遍历容器(crbegin()返回 const)
reverse_iterator rend():返回首元素前一个位置的迭代器指针(crend()返回 const)
reference front():返回首元素的引用
reference back():返回尾元素的引用
at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。
operator[] 返回容器中指定位置的一个引用。
(5) 操作函数
get_allocator 使用构造函数返回一个拷贝。
void sort():容器内所有元素排序,默认是升序(没有??)
template<class Pred>void sort(Pred pr):容器内所有元素根据预断定函数pr排序
void swap(list& str):两list容器交换功能
void reverse(num):为vector保留最小存储空间num
Vector排序:
用排定函数排序,或模板提供的less/greater
#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
using namespace std;
bool SortByNum(const int x, const int y)//降序
{
return x > y;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> vectorInt = { 45, 232, 2, 34, 666, 23, 1 };
vector<int>::iterator iterInt;
//less<int> sortFunc;//升序
//greater<int> sortFunc;//降序
//sort(vectorInt.begin(), vectorInt.end(), sortFunc);
sort(vectorInt.begin(), vectorInt.end(), SortByNum);
for (iterInt = vectorInt.begin(); iterInt != vectorInt.end(); iterInt++)
cout << *iterInt << endl;
return 0;
}
Vector成员使用方法,参考连接:
http://www.howsoftworks.net/cplusplus.api/std/indexvector.html