STL中vector小结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL中vector小结相关的知识,希望对你有一定的参考价值。
(1)使用vector之前必须包含头文件<vector>:#include<vector> (2)namespace std{ template <class T, class Allocator = allocator<T> > class vector; } vector的元素可以是任意类型T,但必须具备assignable和copyable两个性质。第二个template参数可有可无,用来定义内存模型,缺省的模型是C++标准程序库提供的allocator。 (3)在末端附加或删除元素时,vector的性能相当好。可是如果你在前端或中部安插或删除元素,性能就不怎么样了,因为操作点之后的每一个元素都必须移动到另一个位置,而每一次移动都得调用assignment操作符 (4)vector性能优异的秘籍之一就是配置比其所容纳的元素所需更多的内存。当vector申请的内存被用尽时,vector会重新申请一片新的内存,通常新申请的内存会是原来内存的两倍.一旦内存重新配置,和vector元素相关的所有references,pointers,iterators都会失效 (5)vector的各项操作: vector<Elem> c 产生一个空vector vector<Elem> c1(c2) 产生另一个同型vector的副本 vector<Elem> c(n) 利用元素的default构造函数生成一个大小为n的vector vector<Elem> c(n, elem) 产生一个大小为n的vector,每个元素值都是elem vector<Elem> c(beg, end) 产生一个vector,以区间[beg, end)作为元素初值 c.~vector<Elem>() 销毁所有元素并释放内存 c.size() 返回当前的元素数量 c.empty() 判断vector是否为空 c.max_size() 返回可容纳的元素最大数值 c.capacity() 返回重新分配空间前所能容纳的元素最大数量 c.reserve() 如果容量不足,扩大之 c1 compare c2 compare可为==,!=,<,>,<=和>= c1 = c2 将c2全部元素赋值给c1 c.assign(n, elem) 复制n个elem,赋值给c c.assign(beg, end) 将区间[beg, end)内的元素赋值给c c1.swap(c2) 将c1和c2元素互换 c.at(idx) 返回索引idx所标示的元素,如果idx越界则抛出out_of_range异常 c[idx] 返回索引idx所标示的元素,不进行范围检查 c.front() 返回第一个元素,不检查元素是否存在 c.back() 返回最后一个元素,不检查元素是否存在 c.begin() 返回一个随机存取迭代器,指向第一个元素 c.end() 返回一个随机存取迭代器,指向最后元素的下一个位置 c.rbegin() 返回一个逆向迭代器,指向逆向迭代的第一个元素 c.rend() 返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置 vector迭代器持续有效,除非发生两种情况:(1)使用者在一个较小的索引位置上安插或移除元素(2)由于容量的变化而引起内存的重新分配 c.insert(it, elem) 在it位置上插入一个elem副本并返回新元素的位置 c.insert(it, n, elem) 在it位置上插入n个elem副本,无返回值 c.insert(it, beg, end) 在it位置上插入区间[beg, end)内的所有元素副本,无返回值 c.push_back(elem) 在尾部添加一个elem副本 c.pop_back() 移除最后一个元素(但不回传) c.erase(it) 移除it位置上的元素,返回下一个元素的位置 c.erase(beg, end) 移除[beg, end)区间内的所有元素,返回下一个元素的位置 c.resize(num) 将元素数量改为num(如果size()变大了,多出来的新元素都需以default构造函数构造完成) c.resize(num, elem) 将元素数量改为num(如果size()变大了,多出来的新元素都是elem的副本) c.clear() 将容器清空
以上是关于STL中vector小结的主要内容,如果未能解决你的问题,请参考以下文章