STL 序列容器之vector

来源:互联网 发布:冲田杏梨seo 681 编辑:程序博客网 时间:2024/06/05 02:09

参考资料:http://www.cplusplus.com/reference/vector/

一、常用API

1,构造函数

std::vector<int> first;                               
std::vector<int> second (4,100);                       // (100,100,100,100)
std::vector<int> third (second.begin(),second.end());  
std::vector<int> fourth (third);              

int myints[] = {16,2,77,29};
std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); //(16,2,77,29)

2,赋值函数assign

first.assign(5,100); //(100,100,100,100,100)
first.assign(it+1, second.end()-1); //[start, end) (100,100)
first.assign(myints, myints + sizeof(myints) / sizeof(int)) //(16,2,77,29)

3,获取|赋值某个索引位置的值

first.at(index)=value

first.at(index) 类型[]运算符,但at会进行越界检查,而[]运算符不会检查,会直接返回其地址值

int *p = myvector.data() ; 返回vector数组的指针,可直接存储或者访问其元素。

因为vector元素连续存储,可进行偏移指针p++等操作 *p=10;  ++p; p[2]=20;

myvector.fron() 获取vector中第一个元素

myvector.back() 获取vector中最后一个元素

4,插入操作

emplace(iterator, value) 在指定位置插入新元素以扩展容器(效率低,插入时后面的元素会依次往后移动)

emplace_back(value) 在容器末尾添加元素

insert(iterator, value)  insert(iterator, n, value) 迭代器指定位置插入指定值; 插入指定数量的指定值

insert(iterator, first, last) 插入容器或者数组的指定的范围

push_back(value) 容器末尾插入指定值

5,迭代器

【begin()  & end()】【rbegin() & rend()】

std::vector<int>::iterator it  ;    std::vector<int>::reverse_iterator rit

vector<int>::iterator it=myvector.begin(); begin()指向第一个元素

it != myvector.end(); end()指向最后一个元素的后一个位置

【cbegin() & cend()】【crbegin() & crend()】

std::vector<int>::const_iterator cit     ;    std::vector<int>::reverse_const_iterator crit

for(auto it=myvector.begin(); it != myvector.end(); ++it)

for(myvector<int>::const_iterator it=myvector.begin(); it != myvector.end(); ++it)

PS:编译时,需带-std=c++0x 

6,存储空间的大小

size()是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。
capacity()是指在发生realloc前能允许的最大元素数,即预分配的内存空间。

相应的,

使用resize(len),容器内的对象内存空间是真正存在的。 
使用reserve(len)仅仅只是修改了capacity的值,容器内的对象并没有真实的内存空间(空间是"野"的)。

(PS:resize(len, val); resize(len)  若原先长度大于len,则截断;若小于,则默认用0补足,否则用指定val补足)

max_size()  返回vector容器能容纳元素的最大数量

empty() 判断vector是否为空,空返回true,否则true

7,删除操作

clear() 删掉vector中所有元素,使size为0

erase(position)  erase(iter_start, iter_end) 参数为迭代器类型

for(vector<int>::iterator it=v.begin(); it!=v.end();++it) v.erase(*it)  --删除it后,it指向被删除的后一个元素

pop_back() 删除vector的最后一个元素

8,交换操作

v1.swap(v2)  交换v1,v2两个vector的元素

0 0