码迷,mamicode.com
首页 > 其他好文 > 详细

vector

时间:2020-06-07 12:42:17      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:back   示例   push   for   检查   auto   vector容器   col   erase   

1、越界检查
a[2] 数组不会检查越界,vector会检查越界

2、容器中不能存放引用
vector, vector<int*>,
vector<int&>(这种情况不可以) 引用是个别名,不是对象,不是对象不能往vector中放

3、比较少见的几种创建方式
vector a(5, -1); // 初始化,其中是5个int 每个元素都是-1
vector a(5); // 其中的5 只是表示该容器中元素的个数,而不是其中的值为5

4、迭代器

(1)常见迭代器

vector::iterator            // 普通迭代器,可以读写
vector::const_iterator   //常量迭代器,所指的内容不能通过该迭代器修改
begin()     // 返回指向第一个元素的迭代器 end() 返回指向最后一个元素后的一个不存在的元素的迭代器,相当于一种结束标志
rbegin()   //返回指向最后一个元素的迭代器 rend() 返回指向第一个元素前的一个不存在的元素的迭代器,相当于一种结束标志
cbegin()/cend()   // 作用与 begin()/end() 相同,只是返回的是常亮迭代器

(2)vector的插入

vector vct = {1, 2, 3, 4, 5};
auto itor = std::find(vct.begin(), vct.end(), 3);
vct.insert(itor, 100); // 将100 插入到3 之前

(3)vector元素的删除

vct.erase(itor); // 删除itor所指向的元素,同时返回指向被删除元素后一个元素的迭代器
//所以逐个删除vector容器中元素时候,不能用for循环,错误示例:
for (auto iter = vct.begin(); iter != vct.end(); ++iter)
{
    vct.erase(iter);
}
// 而应该用while 循环,正确示例:
auto iter = vct.begin();
while (iter != vct.end())
{
    iter = vct.erase(iter);
}

(4)vector 中的内存释放

//如果容器中的指针对象是自己new出来的,在用完该容器的时候,需要自己释放容器中new出来的内存,用迭代器释放
vector<IElement > vct;   // 假定IElement为自定义类
IElement pElement = new IElement();
vct.push_back(pElement);
for (auto iter = vct.begin(); iter != vct.end(); ++iter)
{
    delete (*iter);
}

 

vector

标签:back   示例   push   for   检查   auto   vector容器   col   erase   

原文地址:https://www.cnblogs.com/zhiminzeng/p/13060132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!