STL 序列容器之vector
2017-01-25 10:05
309 查看
参考资料:http://www.cplusplus.com/reference/vector/
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
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的元素
一、常用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的元素
相关文章推荐
- STL概览-序列容器vector,deque,list
- C++ STL 提供了3个序列容器 :vector, deque, list
- STL学习系列之二——序列容器(vector)
- STL序列容器 vector, list, deque的比较
- STL有6种序列容器(vector, list, deque, queue, priority_deque, stack)
- STL序列容器vector、deque、list和array学习笔记
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL序列容器(vector)
- STL概览-序列容器vector,deque,list
- STL中序列容器之Vector
- STL序列容器之vector
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- stl之序列容器——vector
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- STL序列容器之vector
- STL学习系列之二——序列容器(vector)
- C++ STL容器的学习使用(vector、queue、list、set、map)
- STL源码解析-04序列容器-02list
- STL-容器间的复制list&vector