vector
Posted zhiminzeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
为什么std :: foreach不能用于std :: vector ? [重复]